防止使用多重循环/PHP 的替代方法

我试图选择 2(Two) 数组之间的差异。是的,我有一个使用循环的解决方案。但我认为这是一个大问题,因为使用太多循环会使过程变慢。我问是否有替代方法或简单方法来处理相同的输出。


这是我的代码


$unique = [];

$first_array =  [["SERIAL_NUMBER" => "1"]];

$second_array = [["SERIAL_NUMBER" => "1"],["SERIAL_NUMBER" => "2"]];



foreach ($second_array as $second) {

    foreach($first_array as $first)

    {

        if($second['SERIAL_NUMBER'] == $first['SERIAL_NUMBER'])

        {

            continue 2;

        }

    }

    $unique[] = $second;

}


foreach ($first_array as $first) {

    foreach($second_array as $second)

    {

        if($first['SERIAL_NUMBER'] == $second['SERIAL_NUMBER'])

        {

            continue 2;

        }

    }

    $unique[] = $first;

}

echo json_encode($unique);

结果将是 2(two) 数组的差值。


PS:这是基于多维数组的特定键(SERIAL_NUMBER)


[{"SERIAL_NUMBER":"2"}]


holdtom
浏览 110回答 1
1回答

富国沪深

不同之处在于,大多数事情都会使用某种循环,即使您在代码中看不到循环,它也可能在内部完成。此代码使用array_udiff(), 主要是为了简化代码,而且因为它是一个多维数组 - 您不能只使用array_diff(). 该函数只是比较每个元素的 SERIAL_NUMBER 值。这在每个方向上完成一次(1 => 2 和 2 => 1)然后合并结果......function udiffCompare($a, $b){&nbsp; &nbsp; return $a['SERIAL_NUMBER'] <=> $b['SERIAL_NUMBER'];}$arrdiff1 = array_udiff($first_array, $second_array, 'udiffCompare');$arrdiff2 = array_udiff($second_array, $first_array, 'udiffCompare');$difference = array_merge($arrdiff1, $arrdiff2);
打开App,查看更多内容
随时随地看视频慕课网APP