我有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
两个nest-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也是一个很好的解决方案时,技巧才有意义。