[PHP] 配列の内部ポインタ(カーソル)の操作

概要

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の配列が内部的にこうやって動いてるということを想像するとどこかで役立つかも?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です