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.
Super funktioniert es. –
super genaue Logik. Jetzt muss ich sehen, was passiert, wenn ich mehrere Fächer betrete. –