2012年3月22日木曜日

[PHP] 配列の最初と最後のキーまたは値を調べる

あんまり機会としては少ないとは思うが、稀に配列の最初の要素のキー(添字)や値を調べたくなる時がある。
添字配列であれば最初は0から始まりcount($array)-1で終わっているはずだが、
連想配列としてキーが文字列だったり、添字配列に連想配列が混ざったりしていると、
なかなかそうはいかない。

そういう時は配列のポインタを利用する。

配列は実は内部に現在どこの要素を指しているかを調べるポインタを持っているのだ。
foreachなんかはそのポインタを1個1個移動させて中の要素を取り出している。

故にポインタを最初の位置と最後の位置に移動させて、キーや値を取得すれば良い。

//link・・・http://mio-koduki.blogspot.com/2012/03/javascriptphp_12.html
//第一引数・・・最初のキーを取得したい配列
//返り値・・・最初のキー
function get_first_key($array)
{
    reset($array);
    return key($array);
}

//第一引数・・・最初の値を取得したい配列
//返り値・・・最初の値
function get_first_value($array)
{
    return reset($array);
}

//第一引数・・・最後のキーを取得したい配列
//返り値・・・最後のキー
function get_last_key($array)
{
    end($array);
    return key($array);
}

//第一引数・・・最後の値を取得したい配列
//返り値・・・最後の値
function get_last_value($array)
{
    return end($array);
}

array_shiftやarray_popでも最初、最後の値を取得することはできるが、
これらは元になった配列から値が削除されてしまうため、予期しない挙動になることがある。

しかし、これらを利用して

//最初のキー
$keys=array_keys($array);
array_shift($keys);

//最初の値
$values=array_values($array);
array_shift($values);

//最後のキー
$keys=array_keys($array);
array_pop($keys);

//最後の値
$values=array_values($array);
array_pop($values);

ということも出来なくはない。
これらを組み合わせて

//最初のキー
$keys=array_keys($array);
reset($keys);

//最初の値
$values=array_values($array);
reset($values);

//最後のキー
$keys=array_keys($array);
end($keys);

//最後の値
$values=array_values($array);
end($values);

でもOK
また下記のように一行でもかけるが、
E_NOTICEレベルエラーが出るので、
E_NOTICEレベルエラーを表示してるとちょっと邪魔臭い。

//最初のキー
reset(array_keys($array));

//最初の値
reset(array_values($array));

//最後のキー
end(array_keys($array));

//最後の値
end(array_values($array));

こんな感じ。

0 件のコメント:

コメントを投稿