2013-03-13 29 views
2

我有一个数组:PHP如何为数组设置键?

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

回答

3

这是因为数字ID与查看索引分开计数。字符串索引没有数字并且不计数。

1

PHP manual您的原始数组的定义引用:

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

,并从array_merge()文档:

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

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

所以,这一切都非常明确地记载

0

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

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

虽然如此,这不是严格相关,因为['用数字键输入数组中的值将与递增密钥从零在结果array.'开始重新编号](HTTP ://www.php.net/manual/en/function.array-merge.php) – 2013-03-13 12:20:43

0

你似乎假定排序或与非一一致性都数字键,它不存在。

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

这简直就是它的方式是它是完全有道理的。

0

请检查文档:

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

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

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