php 使用不同的标识键隔离两个二维数组之间的不同行

hgb9j2n6  于 2023-01-19  发布在  PHP
关注(0)|答案(2)|浏览(90)

阵列一:

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

dxxyhpgq1#

试试这个

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

h9a6wy2h2#

最优雅的是,反转this answer of mine的功能效果。
代码:(Demo

var_export(
    array_udiff(
        $arr2,
        $arr1,
        fn($a, $b) => ($a['uid'] ?? $a['uxid']) <=> ($b['uid'] ?? $b['uxid'])
    )
);

由于$a$b变量可能与任意一个输入数组相关,因此必须尝试访问数组的一个键,然后回退到另一个数组的键。
输出:

array (
  2 => 
  array (
    'uxid' => 'ricoetc1',
  ),
  4 => 
  array (
    'uxid' => 'panterafan',
  ),
)

要重新索引输出,只需在array_udiff()的输出上调用array_values() ...如果确实需要的话。

相关问题