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

Perl日記

PerlとかRubyとかPHPとかPythonとか

PHPの配列は配列ではないので気をつけろ

PHPの配列は配列ではない。

PHP の配列は、実際には順番付けられたマップです。

http://php.net/manual/ja/language.types.array.php

他の言語でいうところの配列は、PHPでは添字がキーになった辞書である。
なので、値のリストと、キー・値のペアを一緒に混ぜ込めてしまう。

<?php
//$arr = array(13, 52, "seven" => 7, 634);  PHP5.3以前
$arr = [13, 52, "seven" => 7, 634]; // PHP 5.4以降

print_r($arr);
//=> Array
//=> (
//=>     [0] => 13
//=>     [1] => 52
//=>     [seven] => 7
//=>     [2] => 634
//=> )

なんだこれ。

順序付けられた(be ordered)マップなので、辞書として初期化すると、その順序で取り出せる。

<?php
foreach (["one" => "eins", "two" => "zwei", "three" => "drei"] as $en => $de) {
    echo "\$en: $en, \$de => $de\n";
}
//=> $en: one, $de => eins
//=> $en: two, $de => zwei
//=> $en: three, $de => drei


配列は配列ではなくて、辞書には順番があって、PHPを扱うときは意識を切り替えないといけないから気をつけろ。