如何获取小于值的数组键

时间:2017-07-31 22:36:32

标签: php arrays dictionary array-filter

我有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循环。

2 个答案:

答案 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,
)
*/