我有2个多维数组。我通过foreach
循环运行第一个来从中获取数据。然后在第一个循环中运行第二个foreach
循环,创建一个嵌套的foreach
循环。然后在第二个foreach
循环内运行if语句,将第一个数组的值与第二个数组进行比较并显示一些有效的输出,但我有点担心长时间运行。所以我的问题是,是否有一种更简洁,更简洁的方式来编写更短的运行类型:
@foreach($arrayOne as $firstArray)
@foreach($arrayTwo as $secondArray)
@if($firstArray['id'] == $secondArray['linkedId'])
/*output some data*/
@endif
@endforeach
@endforeach
答案 0 :(得分:0)
两个嵌套的foreach解决方案的复杂性为O(n * k)
,其中n = len(array1)
和k = len(array2)
。但是,通过使用哈希表(PHP世界中的关联数组),您可以实现更小的复杂度O(n + k)
。
$twoByLinkedId = [];
foreach ($arrayTwo as $x) { // K iterations
if (empty($twoByLinkedId[$x['linkedId']])) {
$twoByLinkedId[$x['linkedId']] = [];
}
array_push($twoByLinkedId[$x['linkedId']], $x);
}
foreach ($arrayOne as $el) { // N iterations
$entries = empty($twoByLinkedId[$el['id']])
? []
: $twoByLinkedId[$el['id']];
foreach ($entries as $entry) { // only few iterations
/* output $entry */
}
}
因此,您可以看到解决方案的复杂性为O(k + n*t)
,其中t
是一个较小的数字。
当然,只有当两个数组的长度都很大时,这个技巧才有意义,否则简单的嵌套foreach也是一个很好的解决方案。