当将键0添加到数组PHP中的其他元素时,第一个数组元素将被删除


First array element get removed when added key 0 to other element in array PHP

嗨,我有一个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

希望你能理解。