代码之家  ›  专栏  ›  技术社区  ›  Triwahyu Pamungkas Pribadi

如何使用php组合具有相同索引和值的两个数组?

  •  2
  • Triwahyu Pamungkas Pribadi  · 技术社区  · 6 年前

    我有两个数组,如下所示:

    $array1 = [
     '0' => [
       'no_invoice' => 'INV0001',
       'product_code' => '1111111',
      ], 
     '1' => [
      'no_invoice' => 'INV0001',
      'product_code' => '1111112',
     ]
    ];
    
      $array2 = [
        '0' => [
          'product_code' => '1111112',
          'free_valie' => 839,
          'count' => 1240
        ],
      ];
    

    是否可以将上面的阵列组合成这样:

    Array(
     [0] => Array
      (
        'no_invoice' => 'INV0001',
        'product_code' => '1111111',
      )
     [1] => Array
      (
        'no_invoice' => 'INV0001',
        'product_code' => '1111112',
        'free_valie' => 839,
        'count' => 1240
      )
    )
    

    所以,如果数组具有相同的产品代码,那么它将像上面的示例一样连接。

    我尝试过使用数组合并, array_merge($array1, $array2) ; 但结果是这样的:

    Array(
     [0] => Array
      (
        'no_invoice' => 'INV0001',
        'product_code' => '1111111',
      )
     [1] => Array
      (
        'no_invoice' => 'INV0001',
        'product_code' => '1111112',
      )
     [2] => Array
      (
        'product_code' => '1111112',
        'free_valie' => 839,
        'count' => 1240
      )
    )
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   Nick SamSmith1986    6 年前

    此代码将执行您想要的操作。它循环遍历每个值 $array1 ,使用 array_search 看看中心是不是 product_code $array2 (通过查看 产品代码 $array2 提取使用 array_column )。如果是,则合并这些值。注意,我们使用 &$val 在foreach中,通过引用传递值,从而允许在循环中修改该值

    foreach ($array1 as &$val) {
        if (($k = array_search($val['product_code'], array_column($array2, 'product_code'))) !== false) {
            $val = array_merge($val, $array2[$k]);
        }
    }
    
    print_r($array1);
    

    输出:

    Array
    (
        [0] => Array
            (
                [no_invoice] => INV0001
                [product_code] => 1111111
            )
    
        [1] => Array
            (
                [no_invoice] => INV0001
                [product_code] => 1111112
                [free_valie] => 839
                [count] => 1240
            )
    
    )
    

    Demo on 3v4l.org

        2
  •  2
  •   Karthik Sekar    6 年前

    $array1 = [
        '0' => [
            'no_invoice'   => 'INV0001',
            'product_code' => '1111111',
        ],
        '1' => [
            'no_invoice'   => 'INV0001',
            'product_code' => '1111112',
        ]
    ];
    
    $array2 = [
        '0' => [
            'product_code' => '1111112',
            'free_valie'   => 839,
            'count'        => 1240
        ],
    ];
    
    foreach ($array1 as $key => &$value) {
        $key = array_search($value['product_code'], array_column($array2, 'product_code'));
        if ($key !== false) {
            $value  = array_merge($value, $array2[$key]);
            unset($array2[$key]);
            $array2 = array_values($array2);
        }
    }
    echo '<pre>';
    print_r($array1);
    exit;