2011-04-25 103 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; 
}