2013-03-13 57 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