PHP prepend associative array with literal keys?

十年热恋 提交于 2019-11-26 12:09:37

问题


Is it possible to prepend an associative array with literal key=>value pairs? I know that array_unshift() works with numerical keys, but I\'m hoping for something that will work with literal keys.

As an example I\'d like to do the following:

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

// prepend magic

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

回答1:


Can't you just do:

$resulting_array = $array2 + $array1;

?




回答2:


The answer is no. You cannot prepend an associative array with a key-value pair.

However you can create a new array that contains the new key-value pair at the beginning of the array with the union operator +. The outcome is an entirely new array though and creating the new array has O(n) complexity.

The syntax is below.

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

Note: Do not use array_merge(). array_merge() overwrites keys and does not preserve numeric keys.




回答3:


In your situation, you want to use array_merge():

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

To prepend a single value, for an associative array, instead of array_unshift(), again use array_merge():

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



回答4:


@Cletus is spot on. Just to add, if the ordering of the elements in the input arrays are ambiguous, and you need the final array to be sorted, you might want to ksort:

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



回答5:


Using the same method as @mvpetrovich, you can use the shorthand version of an array to shorten the syntax.

$_array = array_merge(["key1" => "key_value"], $_old_array);

References:

PHP: array_merge()

PHP: Arrays - Manual

As of PHP 5.4 you can also use the short array syntax, which replaces array() with [].



来源:https://stackoverflow.com/questions/1371016/php-prepend-associative-array-with-literal-keys

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!