簡體   English   中英

PHP array_merge鍵順序

[英]PHP array_merge key order

數組數組中的鍵執行array_merge的順序是否重要,即下面第二個數組中的鍵是否會覆蓋第一個數組中的鍵:

array1 = array('username' => 'abc', 'level' => 'admin', 'status' => 'active');
array2 = array('level' => 'root', 'status' => 'active', 'username' => 'bcd');

或者兩個數組中鍵的順序是否相同?

手冊說明了這個問題的答案:

將一個或多個數組的元素合並在一起,以便將一個值的值附加到前一個數組的末尾。 它返回結果數組。

如果輸入數組具有相同的字符串鍵,則該鍵的后一個值將覆蓋前一個鍵。 但是,如果數組包含數字鍵,則后面的值不會覆蓋原始值,但會附加。

所以,如果第二個數組包含一些相同的鍵,則第二個數組中的鍵將覆蓋第一個數組中的鍵。

$array1 = array('username' => 'abc', 'level' => 'admin', 'status' => 'active');
$array2 = array('level' => 'root', 'status' => 'active', 'username' => 'bcd');

$new = array_merge($array1, $array2);

print_r($new);

輸出:

Array
(
    [username] => bcd
    [level] => root
    [status] => active
)

所以你可以看到第二個數組中的鍵覆蓋了第一個鍵中相同的鍵; 每個數組中鍵的順序無關緊要。

這是一種替代解決方案,允許使用模板數組來定義輸出順序。 缺少的字段用null或指定填充。 在這個例子中, firstlast字段用---填充。

請注意上一個答案中有關數字鍵的突出顯示文本。

function array_merge_template($array1, $array2, $template, $fill=null) {
    $_template = array_fill_keys($template, $fill);
    return array_intersect_key ( array_replace ( $_template, array_merge($array1, $array2)) , $_template);
}

輸入:

$array1 = ['username' =>'abc', 'level' =>'admin', 'status' =>'active', 'foo'=>'x'];
$array2 = ['level' =>'root', 'status' =>'active', 'username' =>'bcd', 'bar'=>'y'];
$template = ['first','level','foo','username','bar','status','last'];

輸出:

/* array_merge($array1,$array2) */
[
    "username" =>  "bcd",
    "level"    =>  "root",
    "status"   =>  "active",
    "foo"      =>  "x",
    "bar"      =>  "y"
]

/* array_merge_template($array1,$array2,$template,'---') */
[
    "first"    =>  "---",
    "level"    =>  "root",
    "foo"      =>  "x",
    "username" =>  "bcd",
    "bar"      =>  "y",
    "status"   =>  "active",
    "last"     =>  "---"
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM