我有2个阵列:
$arr_1=array(200, 300, 200, 200);
$arr_2=array(
1 => array(70, 90, 70, 20),
2 => array(115, 150, 115, 35),
3 => array(205, 250, 195, 55),
4 => array(325, 420, 325, 95),
5 => array(545, 700, 545, 155)
);
现在我需要一些方法来获取 $ arr_1 中数组的数组键,其中所有值都小于 $ arr_2 中的所有值。
在上面的示例中,它必须从 $ arr_2 返回键1
和键2
,而不使用foreach循环。
答案 0 :(得分:2)
您可以使用array_filter
过滤元素(它会保留键),然后将结果传递给array_keys
以接收键数组。
此外,您的情况可以这样拼写:"返回$ arr_2中的子数组,其中最高值小于$ arr_1的最小值。"
$arr_1=array(200, 300, 200, 200);
$arr_2=array(
1 => array(70, 90, 70, 20),
2 => array(115, 150, 115, 35),
3 => array(205, 250, 195, 55),
4 => array(325, 420, 325, 95),
5 => array(545, 700, 545, 155)
);
$filtered = array_filter($arr_2, function($value) use ($arr_1) {
return max($value) < min($arr_1);
});
$keys = array_keys($filtered);
var_dump($keys);
答案 1 :(得分:0)
如果您只想将子阵列与$arr_1
中的最低值进行比较,那么最佳实践要求您在输入array_filter()
之前声明该值。这将使函数不必在每次迭代时调用min()
。 (Demo)
$arr_1=[200,300,200,200];
$arr_2=[
1=>[70,90,70,20],
2=>[115,150,115,35],
3=>[205,250,195,55],
4=>[325,420,325,95],
5=>[545,700,545,155]
];
$limit=min($arr_1); // cache this value, so that min() isn't called on each iteration in array_filter()
$qualifying_keys=array_keys(array_filter($arr_2,function($a)use($limit){return max($a)<$limit;}));
var_export($qualifying_keys);
/*
array(
0=>1,
1=>2,
)
*/