echo count(array("1" => "A", 1 => "B", "C", 2 => "D"));
これは 2 を出力します。いじってみたところ、配列のキーとして使用される場合、PHP は文字列の数値と整数の両方を同じように識別することに気付きました。整数が優先されるようです。また、配列を var_dump すると、値「B」と「D」を含む要素のみが表示されます。「A」が表示されない理由はわかりましたが、var_dump に「C」が表示されないのはなぜですか?
echo count(array("1" => "A", 1 => "B", "C", 2 => "D"));
これは 2 を出力します。いじってみたところ、配列のキーとして使用される場合、PHP は文字列の数値と整数の両方を同じように識別することに気付きました。整数が優先されるようです。また、配列を var_dump すると、値「B」と「D」を含む要素のみが表示されます。「A」が表示されない理由はわかりましたが、var_dump に「C」が表示されないのはなぜですか?
あなたの配列は基本的に次のように構築されています:
Key "1" is an integer-like string, treat as integer 1
Assign "A" to key 1
Assign "B" to key 1 (overwrite "A")
No explicit key, take greatest key so far and add 1 = 2
Assign "C" to key 2
Assign "D" to key 2 (overwrite "C")
したがって、結果の配列はarray(1=>"B",2=>"D");
連想配列と非連想配列を混在させることはできないようです。C
他のすべての場合と同じようにインデックスを追加すると、期待どおりに機能します。文字列に関しては、それらが有効な整数であれば、 int arraysにキャストされます。
$arr = array("0" => "A", 1 => "B", 2 => "C", 3 => "D");
// However, if you do:
$array = array(
"0" => "A",
1 => "B",
"2" => array(1, 2, 3)
);
期待どおりに表示されますvar_dump array(3) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } }