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

php将多维数组与不匹配的键进行比较并返回不匹配的值,php,multidimensional-array,Php,Multidimensional Array,阵列一: $arr1 = array( array("uid" => "cgajate"), array("uid" => "frankfurt9"), array("uid" => "ricoetc") ); 数组二: $arr2 = array( array("uxid" => "cgajate"), array("uxid" => "ricoetc

阵列一:

    $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);
$tmpArray=array();
foreach($arr1作为$data1){
$duplicate=false;
foreach($arr2作为$data2){
如果($data1['uid']==$data2['uxid'])$duplicate=true;
}
如果($duplicate==false)$tmpArray[]=$data1;
}
回音“”,打印($tmpArray);
试试这个

$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);
试试这个

$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);

这可以做为一个大的丑陋的一行,我把它减半,以便于阅读。如果需要,可以将其进一步分解

代码:(演示:)

输出:

此方法:

  • 从每个多维阵列生成一维阵列
  • 比较值并保留
    $arr1
    中不存在的
    $arr2
  • 重新索引键
  • 并将结果重新构造为所需的多维阵列结构

*此方法不执行迭代数组扫描。

这可以作为一个大的丑陋的单行线来完成,为了便于阅读,我将其减半。如果需要,可以将其进一步分解

代码:(演示:)

输出:

此方法:

  • 从每个多维阵列生成一维阵列
  • 比较值并保留
    $arr1
    中不存在的
    $arr2
  • 重新索引键
  • 并将结果重新构造为所需的多维阵列结构

*此方法不执行迭代数组扫描。

可能重复的。是否还要查找不匹配的
uid
值?或者它们不存在吗?我会投票将其作为副本关闭,除非您要比较的阵列具有不同的键,因此使用
array\u diff
解决方案并不明显。我可以建议您编辑您的问题以强调关键点不同的事实吗?此外,@mickmackusa的答案似乎最准确,因为他采用的方法是首先将问题转化为一个可以通过核心
数组_diff
函数轻松解决的问题。是否还希望找到不匹配的
uid
值?或者它们不存在吗?我会投票将其作为副本关闭,除非您要比较的阵列具有不同的键,因此使用
array\u diff
解决方案并不明显。我可以建议您编辑您的问题以强调关键点不同的事实吗?另外,@mickmackusa的回答似乎最准确,因为他采取的方法是首先将问题转化为一个可以通过核心
数组_diff
函数轻松解决的问题。你应该检查witch数组是否更大,因为如果你切换$arr1和$arr2的位置,你将不会得到结果…如果我正确阅读代码,你应该检查巫婆数组是否更大,因为如果你切换$arr1和$arr2的位置,你将不会得到结果…如果我正确阅读代码
array (
  0 => 
  array (
    'uxid' => 'ricoetc1',
  ),
  1 => 
  array (
    'uxid' => 'panterafan',
  ),
)