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

时间:2015-02-13 02:43:16

标签: php arrays

嗨,我有一个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。请解释一下。非常感谢你。

3 个答案:

答案 0 :(得分:2)

您引用的示例与您的实际用例相匹配。在其中,您明确设置了尚未定义的数组键 。在您的示例中,您正在定义已定义的数组键 。因此,在您的情况下,您将使用稍后在数组声明中设置的新值覆盖原始值。

答案 1 :(得分:1)

我认为您问题的答案在该页面的示例2中。

<?php
$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);
?>

以上示例将输出:

array(1) {
  [1]=>
  string(1) "d"
}

即。数组创建中的后续条目将覆盖先前的条目。因为在数组中你创建了第一个元素&#34; 10&#34;被赋予密钥0,后面的条目0 =&gt; 4将其覆盖。因此,您所看到的是PHP中数组创建的预期结果。

答案 2 :(得分:0)

这里的问题是,您正在定义已分配给值的键的值。让我解释一下。

当PHP解释器遍历数组时,它会分配

[0] -> 10
[1] -> 2
[2] -> 3

然后它会看到[0] -> 4

所以它用[0] -> 10替换[0] -> 4 所以... ..

[3] -> 5
[4] -> 6
希望你能理解。