PHP如何为数组设置密钥?

时间:2013-03-13 12:16:31

标签: php arrays

我有一个数组:

$a = array('color' => 'green', 'format' => 'text', 'link_url');

和另一个:

$b = array('zero', 'one', 'two', 'three', 'test' => 'ok', 'four');

使用array_merge()我有一个这样的数组:

Array
(
    [color] => green
    [format] => text
    [0] => link_url
    [1] => zero
    [2] => one
    [3] => two
    [4] => three
    [test] => ok
    [5] => four
)

为什么PHP如上所述设置数组键?为什么不这样:

Array
(
    [color] => green
    [format] => text
    [2] => link_url
    [3] => zero
    [4] => one
    [5] => two
    [6] => three
    [test] => ok
    [8] => four
)

5 个答案:

答案 0 :(得分:3)

这是因为数字ID与看到索引分开计算。字符串索引没有数字,不计算在内。

答案 1 :(得分:1)

PHP manual引用原始数组定义:

  

密钥是可选的。如果未指定,PHP将使用先前使用的最大整数键的增量。

以及array_merge()上的文档:

  

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。

     

带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。

所有这些都是明确记录的

答案 2 :(得分:0)

好吧,如果你看一下原来的数组,应该清楚:

array(3) {
  ["color"]=>
  string(5) "green"
  ["format"]=>
  string(4) "text"
  [0]=>
  string(8) "link_url"
}

答案 3 :(得分:0)

您似乎假设了一个非数字键的排序或一致性,这是不存在的。

数字键有一个订单,用新值表示;字符串键不是该排序系统的一部分,因此不会影响这些新的数值。

这只是的方式,它完全合理。

答案 4 :(得分:0)

请查看文档:

  

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个键。但是,如果数组包含数字键,则后面的值不会覆盖原始值,但会附加。

     

带有数字键的输入数组中的值将使用从结果数组中的零开始的递增键重新编号。

参考:http://www.php.net/manual/en/function.array-merge.php