2

我有一个数组:

$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
)
4

5 回答 5

3

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

于 2013-03-13T12:19:10.077 回答
1

引用原始数组定义的PHP 手册:

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

并来自array_merge()上的文档:

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

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

所以这一切都非常明确地记录在案

于 2013-03-13T12:18:34.267 回答
0

请检查文档:

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

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

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

于 2013-03-13T12:21:50.680 回答
0

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

array(3) {
  ["color"]=>
  string(5) "green"
  ["format"]=>
  string(4) "text"
  [0]=>
  string(8) "link_url"
}
于 2013-03-13T12:18:41.933 回答
0

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

数字键有一个顺序,这在它们的新值中表示;字符串键不是该排序系统的一部分,因此不会影响那些新的数值。

这就是它的本来面目,而且完全有道理。

于 2013-03-13T12:18:48.370 回答