PHP - 在关联数组的开头添加项

132

如何将一个元素添加到关联数组的开头? 例如,假设我有以下这个数组:

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

当我像这样添加一个元素 $arr['key0'] = 'value0';,我得到的结果是:

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

如何让它变成:

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

谢谢,
Tee


请注意,最小代码示例比仅有变量转储更有帮助(尽管后者也可能有帮助)。 - outis
5个回答

278

4
哪种方法更有效?union 还是 array_merge?如果可以问的话... - Melvin
5
也许你可以做一个性能测试并告诉我们。 - Vael Victus
2
我非常确定 union 更快。 - Mathijs Segers
5
@Timo Huovinen,array_merge无法正常工作是因为PHP将您的键转换为数字,并且array_merge会重置数字键。 - meustrus
4
@FelixKling: 我怎么不知道这个联合运算符呢?太神奇了。太棒了! - Wes Crow
显示剩余5条评论

22

一种方法是使用array_merge函数:

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

根据情况,你也可以利用ksort


3
在这种情况下无关紧要,但如果$arr中已经存在一个键为'key0'的元素,则该 将覆盖正在前置的新值(即'value0'将被覆盖)。 您可以使用联合运算符(+)来解决此问题。 - MrWhite

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

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

    return $array;
}

2

如果您不想合并数组,您可以在迭代数组之前使用ksort()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接