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も立派な言語になったもんだ。