PHP在关联数组前加上文字键?


112

是否可以在常量数组前加上文字键=>值对?我知道array_unshift()可与数字键一起使用,但我希望能与文字键一起使用的东西。

例如,我想执行以下操作:

$array1 = array('fruit3'=>'apple', 'fruit4'=>'orange');
$array2 = array('fruit1'=>'cherry', 'fruit2'=>'blueberry');

// prepend magic

$resulting_array = ('fruit1'=>'cherry', 
                    'fruit2'=>'blueberry', 
                    'fruit3'=>'apple', 
                    'fruit4'=>'orange');

Answers:


219

你不能只是做:

$resulting_array = $array2 + $array1;


15
另请参见array_merge()及其与使用+运算符的区别:br.php.net/manual/en/function.array-merge.php#92602
Havenard

2
@cletus:嘘。是的,我可以。不知道是什么让我觉得我做不到或者什么没做过。感谢您的回复。
科林·布洛克

值得注意的是差异,但是差异与保留数字键有关,并且此数组是带有字符串键的“纯”关联数组。
cletus

29

答案是不。您不能在关联数组前添加键/值对。

但是,您可以使用union操作符在数组的开头创建一个包含新键值对的新数组+。结果是一个全新的数组,创建新数组的复杂度为O(n)。

语法如下。

$new_array = array('new_key' => 'value') + $original_array;

注意:请勿使用array_merge()。array_merge()覆盖键,并且不保留数字键。


“覆盖键,但不保留数字键” ... a)联合运算符(“ +”)如何处理“重复”键?回复:不保留数字键:可能期望
布拉德·肯特

16

在您的情况下,您想使用array_merge():

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));

要为关联数组添加单个值而不是array_unshift(),请再次使用array_merge():

array_merge(array($key => $value), $myarray);

5

@Cletus在现场。只需添加一下,如果输入数组中元素的顺序不明确,并且您需要对最终数组进行排序,则可能要进行ksort

$resulting_array = $array1 + $array2;
ksort($resulting_array);

4
作为后记,ksort返回布尔值,因此上述操作需要以两个语句而不是一个语句来完成,例如$a = $array1 + $array2; ksort($a);,否则$resulting_array将是布尔值,而不是您期望的数组。
El Yobo

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.