2016-12-02 39 views
0

我正在編寫一個程序,我正在使用多維數組。該概念將輸入主題名稱和索引,以顯示誰在學習該主題。如何遍歷多維數組並顯示索引

$var= [ 'Abdullah'=>['full_name'=>'Abdullah_Faraz', 
       'Subject'=>['English','Urdu','Maths']], 

    'Hamid'=>['full_name'=>'Hamid_Amjad', 
       'Subject'=>['PHP','Urdu','C++']], 

    'Abid'=>['full_name'=>'Abid_Ali', 
       'Subject'=>['OOP','OS','Calculus']], 

    'Aqeel'=>['full_name'=>'Aqeel_Bhutta', 
       'Subject'=>['Economics','Statistics','Big_Data']] 

];

foreach ($var as $key => $value) { 
foreach ($value as $key1 => $value1) { 
    foreach ($value1 as $value2) { 

     if($value2='Urdu'){ 
      echo $key; 
    }  
} 
} 

輸出 阿卜杜拉·哈米德·

,但現在我想說明那些誰不學習烏爾都語的指標預期的結果應該是

Abid 
Aqeel 

但我不知道如何爲了達成這個。

回答

1

您可以使用此

foreach ($var as $key => $value) { 
    $lang = $value['Subject'][1]; 
    if($lang != 'Urdu'){ 
     echo $key.'<br>'; 
    } 
} 
0

替換你的內部兩個foreach循環與正常的循環在陣列長度。

<?php 
for ($x = 0; $x < dim-Length; $x++) { 
    echo "The number is: $x <br>"; 
} 
?> 
0

試試這個

foreach ($var as $key => $value) { 
    $flag = 0; 
    foreach ($value as $key1 => $value1) { 
     foreach ($value1 as $value2) { 

      if($value2=='Urdu'){ 
       $flag =1; 
       echo $value; 
     }  
    } 
    if($flag == 0){ 
     echo $key 
    } 

} 
0

請參閱下面的代碼:

//study 'Urdu'    
foreach($var as $nickname => $data){ 
    if (in_array('Urdu', $data['Subject'])) 
     echo $nickname . "<br>"; 
} 

//not study 'Urdu' 
foreach($var as $nickname => $data){ 
    if (!in_array('Urdu', $data['Subject'])) 
     echo $nickname . "<br>"; 

} 
+0

太棒了它的作品。 –

+0

超精確邏輯。現在我必須看看如果我輸入多個主題。 –

0

這樣的任務可以做簡單的用functional programming 。基本上,你需要通過一些謂詞過濾學生數組(例如,他們學習或不學習的科目)。我們可以爲此編寫higher-order function。它將使用array_filter

function filterStudensBySubject($students, callable $subjectCriteria = null) 
{ 
    if (is_null($subjectCriteria)) { 
     $subjectCriteria = function ($subject) { 
      return true; 
     }; 
    } 

    return array_filter($students, function ($student) use ($subjectCriteria) { 
     if (!isset($student['Subject'])) { 
      return false; 
     } 

     return $subjectCriteria($student); 
    }); 
} 

然後,我們可以寫一些指標分析來提供這一功能:

$subjects = ['Urdu']; 
$studySubjects = function ($student) use ($subjects) { 
    return !empty(array_intersect($student['Subject'], $subjects)); 
}; 
$doesNotStudySubjects = function ($student) use ($subjects) { 
    return empty(array_intersect($student['Subject'], $subjects)); 
}; 

我們已經使用array_intersect獲取存在於兩個數組元素的數組。

最後,我們可以得到誰研究對象,誰不生:

$studentsWhoStudySubjects = filterStudensBySubject($var, $studySubjects); 
$studentsWhoDoNotStudySubjects = filterStudensBySubject($var, $doesNotStudySubjects); 

這裏是working demo

此方法將允許您在不重寫循環邏輯的情況下,使用與任何有關主體的標準(僅研究兩個主題,研究不超過三個主題等)相同的函數。

增加:

你問有關顯示鍵:

$echoKey = function ($key) { 
    echo $key, PHP_EOL; 
}; 

$keys = array_keys($studentsWhoStudySubjects); 
array_walk($keys, $echoKey); 

echo PHP_EOL; 

$keys = array_keys($studentsWhoDoNotStudySubjects); 
array_walk($keys, $echoKey); 

閱讀array_keysarray_walk

這可能看起來像很多代碼這樣的瑣碎任務。但是這種方法可以幫助你學會編寫分離的可重用代碼。正如我所提到的,我們可以使用我們的filterStudensBySubject函數根據任何條件(關於主題)過濾學生,而無需重寫函數本身。

0

我有點貢獻,如果我們要檢查多個主題

$arr= array('English','Urdu','Big_Data'); 

    //study 'Urdu' 
    foreach ($var as $key => $data) { 
     if (array_intersect($arr, $data['Subject'])) { 
      echo $key . "<br>"; 
     } 
    } 

這將比較$ ARR的所有科目,並返回指數。