2017-07-31 60 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, 
) 
*/