** 我已编辑此内容以展示如何使用 array_search 让代码正常工作
我有一个数组,$arr1
有 5 列:
key id name style age whim
0 14 bob big 33 no
1 72 jill big 22 yes
2 39 sue yes 111 yes
3 994 lucy small 23 no
4 15 sis med 24 no
5 16 maj med 87 yes
6 879 Ike larg 56 no
7 286 Jed big 23 yes
该数组位于缓存中,而不是数据库中。
然后我有第二个数组,其中包含 id 值列表 -
$arr2 = array(0=>14, 1=>72, 2=>8790)
我如何过滤$arr1
所以它只返回 id 值的行$arr2
?
我的代码按如下方式工作:
$arr1 = new CachedStuff(); // get cache
$resultingArray = []; // create an empty array to hold rows
$filter_function = function ($row) use ($arr2) {
return (array_search($row['id'], $arr2));
};
$resultingArrayIDs = $arr1->GetIds($filter_function, $resultingArray);
这给了我两个输出: $resultingArray 和 $resultingArrayIDs ,它们都代表 $arr1 和 $arr2 的交集。
整个任务只需一次巧妙的本机函数调用即可完成——array_uintersect()
.
由于自定义回调中比较的两个参数可能来自输入数组,因此尝试从id
列,如果没有声明,则回退到参数的值。
在幕后,该函数在评估时执行排序,作为提高执行时间/处理速度的一种手段。我预计这种方法的性能优于迭代调用in_array()
纯粹从最小化函数调用的角度来看。
Code: (Demo)
var_export(
array_uintersect(
$arr1,
$arr2,
fn($a, $b) =>
($a['id'] ?? $a)
<=>
($b['id'] ?? $b)
)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)