概要
PHPの配列は内部ポインタ(カーソル)を持っており、配列内で現在参照している要素をシフトすることができるらしい。適当にコードを書きながら色々試してみたので整理する。
current関数
current関数は、指定した配列の内部ポインタが指している要素を戻す。ポインタ自体は動かさないので連続で呼び出しても結果は変わらない。最初は先頭の要素を示している。
$array = ['a', 'b', 'c']; echo current($array); // a echo current($array); // a echo current($array); // a
next関数
next関数は、内部ポインタを一つ進めて、進めたあとに指し示している要素を戻す。これ以上進めない(=末尾要素を指している)場合はfalseを戻す。
$array = ['a', 'b', 'c']; echo next($array); // b echo next($array); // c echo next($array); // false
prev関数
prev関数は、next関数の逆で、ポインタを一つ前に移動する。これ以上戻れない(=戦闘要素を指している)場合はfalseを戻す
$array = ['a', 'b', 'c']; echo next($array); // b echo next($array); // c echo prev($array); // b echo prev($array); // a echo prev($array); // false
reset関数
内部ポインタを先頭に移動し、先頭要素を戻す
$array = ['a', 'b', 'c']; echo next($array); // b echo next($array); // c echo reset($array); // a
end関数
内部ポインタを末尾に移動し、末尾要素を戻す
$array = ['a', 'b', 'c']; echo current($array); // a echo end($array); // c
each関数
each関数は、現在内部ポインタが指し示している要素のキーと値のペアを戻し、内部ポインタを次に進める。
キーは[0]または[‘key’]で、値は[1]または[‘key’]で参照できる。
$array = ['a', 'b', 'c']; var_dump(each($array)); // [0 => 0, 1 => 'a', 'key' => 0, 'value' => 'a'] var_dump(each($brrby)); // [0 => 1, 1 => 'b', 'key' => 1, 'vblue' => 'b'] var_dump(each($crrcy)); // [0 => 2, 1 => 'c', 'key' => 2, 'vclue' => 'c'] var_dump(each($array)); // false
この関数は PHP 7.2.0 で 非推奨になります。この関数に頼らないことを強く推奨します。
具体例
全然使いみちが思いつかないけど強引に使ってみた。
$user_age = [ 'Taro' => 25, 'Jiro' => 19, 'Hanako' => 14 ]; while ($user = each($user_age)) { echo $user['key'] . 'is' . $user['value'] . "\n"; }
$ php hoge.php Tarois25 Jirois19 Hanakois14
言うまでもなく、上記コードはforeachとかで書き直せる。
所感
直接使うことはまず無いけど、PHPの配列が内部的にこうやって動いてるということを想像するとどこかで役立つかも?