嗨,我有一个PHP数组
$arr = array(10,2,3,0=>4,5,6);
echo "<pre>";
var_dump($arr);
我的预期结果是
<pre>array(6) {
[0]=>
int(4)
[1]=>
int(10)
[2]=>
int(2)
[3]=>
int(3)
[4]=>
int(5)
[5]=>
int(6)
}
但我的结果是
<pre>array(5) {
[0]=>
int(4)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(5)
[4]=>
int(6)
}
从文件上看是
http://php.net/manual/en/language.types.array.php
示例#5键不在所有元素上
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
**在这里,我可以理解没有其他元素具有密钥6。在我的情况下,我认为是因为第一个元素也有关键字0。它被移除了。
但是因为我们在外部为另一个元素添加了键0,所以我觉得10应该有键1。请解释一下。非常感谢。
您引用的示例与您的实际用例不匹配。在其中,您显式设置了一个尚未定义的数组键。在您的示例中,您正在定义一个数组键,该键已被定义。因此,在您的情况下,您将使用稍后在数组声明中设置的新值覆盖原始值。
我认为问题的答案在该页的示例2中。
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?>
上面的例子将输出:
array(1) {
[1]=>
string(1) "d"
}
即,数组创建中较晚的条目将重写较早的条目。因为在您创建的数组中,第一个元素"10"被分配了键0,后面的条目0=>4会覆盖它。因此,您看到的是PHP中创建数组的预期结果。
这里的问题是,您正在为已经分配给值的键定义值。让我稍微解释一下。
当PHP解释器在数组中运行时,它会分配
[0] -> 10
[1] -> 2
[2] -> 3
然后它看到[0] -> 4
,
所以它用[0] -> 4
代替了[0] -> 10
所以…
[3] -> 5
[4] -> 6
希望你能理解。