php将multidimetional数组与非匹配键进行比较并返回不匹配的值

时间:2018-01-19 12:43:12

标签: php multidimensional-array

阵列一:

    $arr1 = array(
        array("uid" => "cgajate"),
        array("uid" => "frankfurt9"),
        array("uid" => "ricoetc")
        );

数组二:

    $arr2 = array(
        array("uxid" => "cgajate"),
        array("uxid" => "ricoetc"),
        array("uxid" => "ricoetc1"),
        array("uxid" => "frankfurt9"),
        array("uxid" => "panterafan")
        );

我有两个多维数组(如上所示,不要为id共享相同的键名,uxid vs uid)。我试图在比较'uid'和'uxid'值的基础上找到无与伦比的数组,我的预期结果是:

Array
(
    [0] => Array
        (
            [uxid] => ricoetc1
        )
    [1] => Array
        (
            [uxid] => panterafan
        )
)

下面是我的代码,我试图找到匹配的值并从结果数组中删除但是当我打印时给我空数组。

  $tmpArray = array();
   foreach($arr1 as $data1) {
    $duplicate = false;
     foreach($arr2 as $data2) {
        if($data1['uid'] === $data2['uxid']) $duplicate = true;
      }
     if($duplicate === false) $tmpArray[] = $data1;
   }
   echo "<pre>", print_r($tmpArray);

2 个答案:

答案 0 :(得分:3)

试试这个

 $arr1 = array(
        array("uid" => "cgajate"),
        array("uid" => "frankfurt9"),
        array("uid" => "ricoetc")
        );

         $arr2 = array(
        array("uxid" => "cgajate"),
        array("uxid" => "ricoetc"),
        array("uxid" => "ricoetc1"),
        array("uxid" => "frankfurt9"),
        array("uxid" => "panterafan")
        );

foreach($arr2 as $k => $v){

if (!in_array($v['uxid'], array_column($arr1, 'uid'))){

    $new[] =$v;     
}

}

print_r($new);

答案 1 :(得分:1)

这可以作为一个丑陋的一个班轮,我把它减半以便于阅读。如果需要,它可以更多地分解。

代码:(演示:https://3v4l.org/DrpQD

$arr1=[
    ["uid"=>"cgajate"],
    ["uid"=>"frankfurt9"],
    ["uid"=>"ricoetc"]
];
$arr2=[
    ["uxid"=>"cgajate"],
    ["uxid"=>"ricoetc"],
    ["uxid"=>"ricoetc1"],
    ["uxid"=>"frankfurt9"],
    ["uxid"=>"panterafan"]
];

$diff2=array_diff(array_column($arr2,'uxid'),array_column($arr1,'uid'));
$result=array_map(function($v){return ['uxid'=> $v];},array_values($diff2));
var_export($result);

输出:

array (
  0 => 
  array (
    'uxid' => 'ricoetc1',
  ),
  1 => 
  array (
    'uxid' => 'panterafan',
  ),
)

此方法:

  • 从每个多维数组生成1-dim数组
  • 比较值并保留$arr2中不存在的$arr1值,
  • 重新索引键,
  • 并将结果重新构建为所需的多暗阵列结构

*此方法不执行迭代阵列扫描。