読者です 読者をやめる 読者になる 読者になる

PHPってfoo()[0]みたいなこと出来なくて不便だよねって話

echo array_keys($b)[0];

って書けたらいいのに。って話。配列の先頭なら current(array_keys($b)); でいいんじゃない?って話なんだけど、current() が必ず先頭を返すわけでもない。

そしたら、reset(array_keys($b)); なら必ず先頭を返すんだって。へぇーと思ったけどE_STRICTに引っかかってしまう。

配列用アクセッサを作っておくという手もあるよね。

でも元ネタのこの場合に限っては、「配列の先頭の連想配列のキー」が欲しいわけだから、

echo key($b);

でいいんじゃないか?(これも配列の内部ポインタに依存しちゃうけど)


で、current(), next(), end(), reset()という関数名からその挙動が全く想像できない変な関数。なんでこんなことになっているかというと、PHP3にはforeachが無かったからだ。

今のPHPのドキュメントには

http://www.php.net/manual/en/control-structures.foreach.php

PHP 4 introduced a foreach construct, much like Perl and some other languages.

とあるし、php-3.0.18のマニュアルには

PHP 4 (not PHP 3) includes a foreach construct, much like perl and some other languages.

となっている。なので昔は

reset($arr);
while (list($key, $value) = each($arr)) {
    echo "Key: $key; Value: $value<br />\n";
}

と書いていたのをふと思い出した。そう考えてみればPHPも立派な言語になったもんだ。