2017-01-09 122 views
1

我有在陣列1我有技能2個陣列 及其合格標記過濾數組值

Array 
(
    [3] => 2 // skill => eligible marks 
    [63] => 6 
    [128] => 3 
) 

在陣列我有學生和其技能和獲得馬克

Array 
(
    [22] => Array 
     (
      [0] => Array 
       (
        [skill_id] => 3 
        [gd_score] => 4 
       ) 

      [1] => Array 
       (
        [skill_id] => 128 
        [gd_score] => 6 
       ) 

     ) 

    [23] => Array 
     (
      [0] => Array 
       (
        [skill_id] => 128 
        [gd_score] => 3 
       ) 

     ) 

    [24] => Array 
     (
      [0] => Array 
       (
        [skill_id] => 3 
        [gd_score] => 7 
       ) 

      [1] => Array 
       (
        [skill_id] => 63 
        [gd_score] => 8 
       ) 

      [2] => Array 
       (
        [skill_id] => 128 
        [gd_score] => 9 
       ) 

     ) 

) 

我想基於陣列1

我想學生

學生篩選10
with skill 3 and marks grater than 2 
AND skill 63 and marks grater than 6 
AND skill 128 and marks grater than 3 

如果標準進行分層返回憑學生證

+1

顯示應該是什麼樣子的預期輸出得到一個快速幫助 – RomanPerekhrest

+0

結果將是一個學生ID,我ñ我上面的問題答案是24,因爲它滿足所有條件。 – Developer

回答

1

用下面的辦法:

$marks = array 
(
    3 => 2, // skill => eligible marks 
    63 => 6, 
    128 => 3 
); 

// $arr is your initial array of student data 
$student_ids = []; 
$marks_count = count($marks); 
foreach ($arr as $k => $items) { 
    // if number of marks coincide 
    if (count($marks) != count($items)) continue; 

    foreach ($items as $item) { 
     if (!isset($marks[$item['skill_id']]) 
       || $marks[$item['skill_id']] >= $item['gd_score']) { 
      continue 2; 
     } 
    } 
    $student_ids[] = $k; 
} 

print_r($student_ids); 

輸出:

Array 
(
    [0] => 24 
) 

測試環節:https://eval.in/private/10a7add53b1378