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

Col*_*ock 110 php arrays associative-array

是否可以在文字键=>值对之前添加关联数组?我知道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');
Run Code Online (Sandbox Code Playgroud)

cle*_*tus 204

你不能这样做:

$resulting_array = $array2 + $array1;
Run Code Online (Sandbox Code Playgroud)

  • 另请参见array_merge()及其与使用+运算符的区别:http://br.php.net/manual/en/function.array-merge.php#92602 (15认同)
  • @cletus:Sheesh.是的,我可以.不知道是什么让我觉得我不能或以前没有工作.谢谢你的回复. (2认同)

PHP*_*uru 27

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

但是,您可以使用union运算符创建一个新数组,该数组在数组的开头包含新的键值对+.结果是一个全新的数组,并且创建新数组具有O(n)复杂性.

语法如下.

$new_array = array('new_key' => 'value') + $original_array;
Run Code Online (Sandbox Code Playgroud)

注意:不要使用array_merge().array_merge()会覆盖键并且不会保留数字键.


小智 16

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

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));
Run Code Online (Sandbox Code Playgroud)

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

array_merge(array($key => $value), $myarray);
Run Code Online (Sandbox Code Playgroud)


kar*_*m79 5

@Cletus是现货.只是要补充一点,如果输入数组中元素的排序不明确,并且您需要对最终数组进行排序,则可能需要ksort:

$resulting_array = $array1 + $array2;
ksort($resulting_array);
Run Code Online (Sandbox Code Playgroud)

  • 作为后来的注释,`ksort`返回boolean,所以上面需要完成两个语句而不是一个,例如`$ a = $ array1 + $ array2; ksort($ a);`,否则`$ resul_array`将是一个布尔值而不是你期望的数组. (4认同)

小智 5

使用与@mvpetrovich 相同的方法,您可以使用数组的速记版本来缩短语法。

$_array = array_merge(["key1" => "key_value"], $_old_array);
Run Code Online (Sandbox Code Playgroud)

参考:

PHP:array_merge()

PHP: 数组 - 手册

从 PHP 5.4 开始,您还可以使用短数组语法,它将 array() 替换为 []。