PHP在关联数组前面加上文字键?
Posted
技术标签:
【中文标题】PHP在关联数组前面加上文字键?【英文标题】:PHP prepend associative array with literal keys? 【发布时间】:2010-11-25 03:43:09 【问题描述】:是否可以在关联数组之前添加文字键=>值对?我知道 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');
【问题讨论】:
【参考方案1】:您不能直接在关联数组前添加键值对。
但是,您可以使用联合运算符+
在数组的开头创建一个包含新键值对的新数组。结果是一个全新的数组,创建新数组的复杂度为 O(n)。
语法如下。
$new_array = array('new_key' => 'value') + $original_array;
注意:不要使用 array_merge()。 array_merge() 覆盖键并且不保留数字键。
【讨论】:
"覆盖键并且不保留数字键"... a) 联合运算符 ("+") 如何处理“重复”键?回复:不保留数字键:可能需要【参考方案2】:使用与@mvpetrovich 相同的方法,您可以使用数组的简写版本来缩短语法。
$_array = array_merge(["key1" => "key_value"], $_old_array);
参考资料:
php: array_merge()
PHP: Arrays - Manual
从 PHP 5.4 开始,您还可以使用短数组语法,将 array() 替换为 []。
【讨论】:
【参考方案3】:在您的情况下,您想使用 array_merge():
array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));
要为关联数组添加单个值,而不是 array_unshift(),再次使用 array_merge():
array_merge(array($key => $value), $myarray);
【讨论】:
【参考方案4】:@Cletus 很到位。补充一下,如果输入数组中元素的顺序不明确,并且需要对最终数组进行排序,您可能需要ksort:
$resulting_array = $array1 + $array2;
ksort($resulting_array);
【讨论】:
作为迟到的说明,ksort
返回布尔值,因此上述需要作为两个语句而不是一个语句来完成,例如$a = $array1 + $array2; ksort($a);
,否则 $resulting_array
将是一个布尔值,而不是您期望的数组。【参考方案5】:
你不能这样做:
$resulting_array = $array2 + $array1;
?
【讨论】:
另见 array_merge() 及其与使用 + 运算符的区别:br.php.net/manual/en/function.array-merge.php#92602 @cletus:嘘。是的,我可以。不知道是什么让我觉得我做不到,或者以前什么不起作用。感谢您的回复。 值得注意的是差异,但这种差异与保留数字键有关,并且该数组是带有字符串键的“纯”关联数组。以上是关于PHP在关联数组前面加上文字键?的主要内容,如果未能解决你的问题,请参考以下文章