【问题标题】:php array merge on key using multidimensional arrayphp数组使用多维数组在键上合并
【发布时间】:2018-02-14 09:51:23
【问题描述】:

这是我的数组:

array 
  0 => 
    array 
      'id' => int 220950
      'order_reference' => string '600125479' 
  1 => 
    array 
      'id' => int 220985
      'order_reference' => string '498638' 

这是我的另一个数组

array 
      0 => 
        array 
          'entity_id' => 1
          'order_status' => 'test' 
      1 => 
        array 
          'entity_id' => 2
          'order_status' => 'test2' 

我的目标是实现这一目标:

array 
      0 => 
        array 
          'id' => int 220950
          'order_reference' => string '600125479'
          'entity_id' => 1
          'order_status' => 'test' 
      1 => 
        array 
          'id' => int 220985
          'order_reference' => string '498638'
          'entity_id' => 2
          'order_status' => 'test2'

通过 array_merge,我设法得到了这个(不是我想要的目标),而这一切都是我在 stackoverflow 和其他论坛上找到的:

array 
      0 => 
        array 
          'id' => int 220950
          'order_reference' => string '600125479' 
      1 => 
        array 
          'id' => int 220985
          'order_reference' => string '498638' 
         array 
      2 => 
        array 
          'entity_id' => 1
          'order_status' => 'test'
      3 => 
        array 
          'entity_id' => 2
          'order_status' => 'test2'

欢迎任何想法或建议 :) 谢谢

使用 foreach 我可以添加键值,但我正在寻找一种更简洁的方法 :)

【问题讨论】:

  • 您的意见是什么?你试过了吗?
  • 这可能会对您有所帮助。 stackoverflow.com/questions/14842272/… 的可能重复项
  • @Smartpal 我想避免使用for或foreach,我想使用array_map
  • @Chester 看看。我已经发布了答案

标签: php arrays


【解决方案1】:

这是使用array_maparray_merge_recursive 对您的问题的回答。

<?php

$array1 = array(
    [
        "id" => 220950,
        "order_reference" => "600125479"
    ],
    [
        "id" => 220985,
        "order_reference" => "498638"
    ]
);

$array2 = array(
    [
        "entity_id" => 1,
        "order_status" => "test"
    ],
    [
        "entity_id" => 2,
        "order_status" => "test"
    ]
);

$results = array();

array_map(function($array1, $array2) use (&$results) {

    $results[] = array_merge_recursive($array1, $array2);

}, $array1, $array2);

var_dump($results);

这将输出:

array (size=2)
  0 => 
    array (size=4)
      'id' => int 220950
      'order_reference' => string '600125479' (length=9)
      'entity_id' => int 1
      'order_status' => string 'test' (length=4)
  1 => 
    array (size=4)
      'id' => int 220985
      'order_reference' => string '498638' (length=6)
      'entity_id' => int 2
      'order_status' => string 'test' (length=4)

【讨论】:

    【解决方案2】:

    请注意,您的数组没有可比较的联合值,因此您需要确保键始终对齐,我认为这样的循环可以解决问题:

    for ($i = 0; $i < count($array1); $i++)
    {
        $new_array[] = array_merge($array1[$i], $array2[$i]);
    }
    

    编辑:您也可以使用array_map(),但它不提供任何性能优势 AFAIK,并且总体上可读性较差。

    $new_array = array_map(function($a1_v, $a2_v) { return array_merge($a1_v, $a2_v); }, $a1, $a2);
    

    【讨论】:

    • 可以使用 array_map 或 array_walk 完成吗? :) 而不是使用 for 或 foreach ? :)
    • 我添加了一个示例,但我认为只使用循环更具可读性。
    【解决方案3】:

    array_mergearray_map

    一起使用
        $array1 = array(
        [
            "id" => 220950,
            "order_reference" => "600125479"
        ],
        [
            "id" => 220985,
            "order_reference" => "498638"
        ]
    );
    
    $array2 = array(
        [
            "entity_id" => 1,
            "order_status" => "test"
        ],
        [
            "entity_id" => 2,
            "order_status" => "test2"
        ]
    );
    
    $result = array_map("array_merge",$array1,$array2);
    print_r($result);
    

    输出

        Array
    (
        [0] => Array
            (
                [id] => 220950
                [order_reference] => 600125479
                [entity_id] => 1
                [order_status] => test
            )
    
        [1] => Array
            (
                [id] => 220985
                [order_reference] => 498638
                [entity_id] => 2
                [order_status] => test2
            )
    
    )
    

    工作example

    【讨论】:

    • @Chester 这就是你想要的!干净整洁!
    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多