为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
holdtom 2023-05-12 15:12:58
我试图选择 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"}]
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

不同之处在于,大多数事情都会使用某种循环,即使您在代码中看不到循环,它也可能在内部完成。


此代码使用array_udiff(), 主要是为了简化代码,而且因为它是一个多维数组 - 您不能只使用array_diff(). 该函数只是比较每个元素的 SERIAL_NUMBER 值。


这在每个方向上完成一次(1 => 2 和 2 => 1)然后合并结果......


function udiffCompare($a, $b)

{

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


查看完整回答
反对 回复 2023-05-12
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信