2017-07-31 58 views
0

我有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

在上面的例子中,必须返回键1和关键2$ arr_2不使用foreach循环。

回答

1

您可以使用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); 
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, 
) 
*/