首页 > 解决方案 > 如果两个数组中的特定键值匹配,则插入新键

问题描述

$array1 = array(
                 [0] => array(
                          'id' => 'gdye6378399sjwui39',
                          'name' => 'Plate 1'
                        ),
                 [1] => array(
                          'id' => 'xyz6378399sjwui39',
                          'name' => 'Plate 2'
                        ),
                 [2] => array(
                          'id' => 'tr2e6378399sjwui39',
                          'name' => 'Plate 3'
                        )
             )

和另一个数组

$array2 =  array(
                 [0] => array(
                          'id' => 'gdye6378399sjwui39',
                          'ETA' => '8'
                        ),
                 [1] => array(
                          'id' => 'tr2e6378399sjwui39',
                          'ETA' => '9'
                        )
                 [2] => array(
                          'id' => 'xyz6378399sjwui39',
                          'ETA' => '5'
                        )

             )

我想比较这两个数组。我这样做是这样的: -

if(!empty($array2))
{
   foreach($array1 as $ck => $cl)
   {
       foreach($array12 as $ued){
       if($cl['id'] == $ued['id'])
       {
          $array1[$ck]['ETA'] = $ued['ETA'];
          break;
       }
    }
}

还有什么其他更好的方法可以做到这一点?两个数组的顺序可能不同,大小也可能不同。

标签: php

解决方案


如果您按 id 索引第二个数组(使用array_column()),您可以不使用内部而逃脱foreach(),只需使用isset()...

$match = array_column($array2, null, 'id');
foreach ( $array1 as $ck=>$cl)   {
    if ( isset($match[$cl['id']]) )    {
        $array1[$ck]['ETA'] = $match[$cl['id']]['ETA'];
    }
}

print_r($array1);

推荐阅读