2016-12-02 4 views
0

Ich schreibe ein Programm, wo ich mehrdimensionale Array verwende. Das Konzept gibt den Namen des Faches ein und der Index zeigt an, welcher Student das Fach studiert.Wie durch Multidimensionalarray iterieren und Index anzeigen

$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; 
    }  
} 
} 

Ausgang Abdullah Hamid

aber jetzt möchte ich den Index von denen zeigen, die nicht Urdu studieren das erwartete Ergebnis sollte

Abid 
Aqeel 

sein, aber ich weiß nicht, wie um das zu erreichen.

Antwort

1

können Sie diese verwenden

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

Ersetzen Sie Ihre inneren zwei foreach Schleifen mit normalen for-Schleife über Array-Länge.

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

versuchen diese

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

Bitte beachten Sie die folgenden Codes sehen:

//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

Super funktioniert es. –

+0

super genaue Logik. Jetzt muss ich sehen, was passiert, wenn ich mehrere Fächer betrete. –

0

Diese Art der Aufgabe einfacher getan werden kann mit functional programming . Grundsätzlich müssen Sie eine Gruppe von Schülern nach einem Prädikat filtern (z. B. Fächer, die sie studieren oder nicht studieren). Wir können dafür higher-order function schreiben. Es wird array_filter verwenden:

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); 
    }); 
} 

Dann können wir einige Kriterien schreiben, um diese Funktion zu liefern:

$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)); 
}; 

Wir array_intersect verwendet haben eine Reihe von Elementen zu erhalten, die in beiden Arrays präsentieren.

Schließlich können wir Studenten, die Themen zu studieren und die dies nicht tun:

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

Hier working demo ist.

wird Dieser Ansatz ermöglicht es Ihnen, die gleiche Funktion mit beliebigen Kriterien unterliegen in Bezug auf die Verwendung (Studie nur zwei Subjekt, Studium nicht mehr als drei Themen, etc.) ohne Looping Logik neu zu schreiben.

Zusatz:

Sie wurden über das Anzeigen Schlüssel zu fragen:

$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); 

Lesen Sie mehr über array_keys und array_walk.

Dies kann wie viel Code für solche triviale Aufgabe aussehen.Mit diesem Ansatz lernen Sie jedoch, entkoppelten wiederverwendbaren Code zu schreiben. Wie ich bereits erwähnt habe, können wir unsere filterStudensBySubject Funktion verwenden, um Schüler nach jeder Bedingung zu filtern (die das Thema betrifft), ohne die Funktion selbst neu schreiben zu müssen.

0

Mein Bit Beitrag, wenn wir mehrere Themen

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

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

Dieser Vergleich wird $ arr mit allen Themen und gibt den Index überprüfen möchten.

Verwandte Themen