2011-04-25 50 views
93

如何將項添加到關聯數組的開頭?例如,假設我有一個這樣的數組:PHP - 將項目添加到關聯數組的開頭

$arr = array('key1' => 'value1', 'key2' => 'value2'); 

當我添加的東西給它在$arr['key0'] = 'value0';,我得到:

Array 
(
    [key1] => value1 
    [key2] => value2 
    [key0] => value0 
)

怎樣使這是

Array 
(
    [key0] => value0 
    [key1] => value1 
    [key2] => value2 
)

謝謝,
Tee

+0

請注意,[最小代碼示例](https://sscce.org/)比單獨使用變量轉儲更有幫助(儘管後者也可能有所幫助)。 – outis 2011-04-25 22:04:53

+0

[PHP prepend關聯數組與文字鍵?]可能的重複?(http://stackoverflow.com/questions/1371016/php-prepend-associative-array-with-literal-keys)。另請參閱:[PHP:Array_unshift非數字索引](http://stackoverflow.com/questions/4516664/php-array-unshift-an-not-numeric-index)。 – outis 2011-04-25 22:11:54

回答

188

您可以使用union operator

$arr1 = array('key0' => 'value0') + $arr1; 

array_merge

+3

哪個更有效率? union還是array_merge?如果我可能會問...... – Melvin 2013-06-14 06:34:24

+3

@melvin:也許你可以做一個性能測試並告訴我們。 – 2013-08-20 20:49:01

+1

我很確定工會更快。 – 2013-12-31 13:25:51

19

一種方法是用array_merge

<?php 
$arr = array('key1' => 'value1', 'key2' => 'value2'); 
$arr = array_merge(array('key0' => 'value0'), $arr); 

根據具體情況,你也可以利用ksort

+2

在這種情況下它並不重要,但是如果在'$ arr'中已經存在一個帶有'key0''鍵的元素,那麼這個_value_會覆蓋被預先加入的新值(即'value0'將被覆蓋) 。你可以使用[union operator('+')](http://www.php.net/manual/en/language.operators.array.php)來解決這個問題。 – MrWhite 2013-03-25 12:17:12

7
$array = array('key1' => 'value1', 'key2' => 'value2'); 
array_combine(array_unshift(array_keys($array),'key0'),array_unshift(array_values($array),'value0')) 
+22

+1因爲如此醜陋。 – outis 2011-04-25 22:13:50

+7

代碼,而不是男人。如果我是適當的性別或說服,我相信我會找到那個帥哥。 – outis 2011-04-25 22:14:17

+0

猜測我只是喜歡這種有點不同...不是最乾淨或最有效的方式,但只是一個演示PHP提供了無數不同的方式來做同樣的事情 – 2011-04-25 22:18:28

2

如果你不想合併數組,你可以在迭代之前在數組上使用ksort()

2
function unshift(array & $array, $key, $val) 
{ 
    $array = array_reverse($array, 1); 
    $array[$key] = $val; 
    $array = array_reverse($array, 1); 

    return $array; 
}