是否可以组合数组?

时间:2018-05-16 19:03:25

标签: php arrays

是否可以合并所有现有数组的内容,如果该密钥已被使用 - 那么什么都没有,如果没有 - 那么它必须从其他数组中添加,但是具有空值

  array(3) {
      [0]=>
            array(4) {
              ["attributes_3_ru-ru"] => "10"
              ["attributes_3_en-gb"] => "100"
              ["attributes_4_en-gb"] => "2222"
              ["attributes_4_ru-ru"] => ""
            }
      [1]=>
            array(2) {
              ["attributes_6_ru-ru"] => "10"
              ["attributes_6_en-gb"] => "100"
            }
        }
      [2]=>
            array(2) {
              ["attributes_4_ru-ru"] => "10"
              ["attributes_4_en-gb"] => "100"
            }
            ...n
    }

输出是这样的

array(3) {
  [0]=>
        array(4) {
          ["attributes_3_ru-ru"] => "10"
          ["attributes_3_en-gb"] => "100"
          ["attributes_4_en-gb"] => "2222"
          ["attributes_4_ru-ru"] => ""
          ["attributes_6_ru-ru"] => ""
          ["attributes_6_en-gb"] => ""
        }
  [1]=>
        array(2) {
          ["attributes_6_ru-ru"] => "10"
          ["attributes_6_en-gb"] => "100"
          ["attributes_3_ru-ru"] => ""
          ["attributes_3_en-gb"] => ""
          ["attributes_4_en-gb"] => ""
          ["attributes_4_ru-ru"] => ""
        }
    }
  [2]=>
        array(2) {
          ["attributes_4_ru-ru"] => "10"
          ["attributes_4_en-gb"] => "100"
          ["attributes_6_ru-ru"] => ""
          ["attributes_6_en-gb"] => ""
          ["attributes_3_ru-ru"] => ""
          ["attributes_3_en-gb"] => ""
        }
        ...n
    }

2 个答案:

答案 0 :(得分:2)

我会这样做。首先,收集所有密钥并创建一个“模板”数组,其中包含空白值。

$merged = array_merge(...$arrays);
$template = array_fill_keys(array_keys($merged), '');

然后将其映射到原始数组数组上,并将每个条目与模板合并。

$result = array_map(function($entry) use ($template) {
    return array_merge($template, $entry);
}, $arrays);

答案 1 :(得分:0)

你应该使用array_merge()。

$megaArray = array_merge($array1, $array2, $array3);

或者,如果我过度简化您的用例,并且由于某种原因您需要将数据附加到$ array3,您可以使用foreach()和in_array()代替。以下内容(未经测试)。

foreach($array1 as $key => $value){
    if(!in_array($key, $array3)){
        $array3[$key] = $value;
  }
  else{
        if($array3[$key] === ""){ // if the current array3 iteration's value is blank, use the new one
            $array3[$key] = $value;
        }
  }
}