代码之家  ›  专栏  ›  技术社区  ›  Colin Brock

带文字键的php前置关联数组?

  •  102
  • Colin Brock  · 技术社区  · 15 年前

    是否可以使用literal key=>值对预先附加关联数组?我知道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');
    
    5 回复  |  直到 15 年前
        1
  •  194
  •   cletus    15 年前

    你不能这样做吗?

    $resulting_array = $array2 + $array1;
    

    ?

        2
  •  23
  •   PHPguru    9 年前

    答案是“否”。不能在关联数组前面加上键值对。

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

    语法如下。

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

    注意:不要使用array_merge()。array_merge()覆盖键,不保留数字键。

        3
  •  16
  •   mvpetrovich    12 年前

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

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

    对于关联数组,若要预处理单个值,请再次使用array_merge(),而不是array_unshift():

    array_merge(array($key => $value), $myarray);
    
        4
  •  5
  •   Dvir Berebi    12 年前

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

    $resulting_array = $array1 + $array2;
    ksort($resulting_array);
    
        5
  •  0
  •   Bryce Gough    6 年前

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

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

    参考文献:

    PHP: array_merge()

    PHP: Arrays - Manual

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