Funktionen zum Arbeiten mit Arrays. Mengenlehre – PHP: Arrays – Hexlet-PHP-Schnittpunkt von Arrays nach Wert

Mengenlehre. Ich weiß, wie viele Menschen Angst vor Mathematikern haben, aber speziell die Mengenlehre (naiv) ist sehr einfach und verständlich. Darüber hinaus nutzen wir seine Elemente ständig im Alltag. Und beim Programmieren tritt es bei jedem Schritt auf.

Das Grundkonzept der Mengenlehre ist überraschenderweise ein Haufen. Eine Menge bezeichnet eine Sammlung von Objekten beliebiger Natur, die als ein Ganzes betrachtet werden. Das einfachste Beispiel sind Zahlen. Der Satz arabischer Ziffern umfasst 10 Elemente und ist Finale. Das Konzept der Endlichkeit ist intuitiv und bedeutet, dass eine Menge endlich viele Elemente hat.

Ein Beispiel für eine unendliche Menge sind natürliche Zahlen. Die Menge der natürlichen Zahlen wiederum ist eine Teilmenge der ganzen Zahlen, die wiederum eine Teilmenge der rationalen Zahlen sind, und so weiter.

„Teilmenge“ bedeutet, dass alle Elemente einer Menge auch in einer anderen Menge enthalten sind, genannt Obermenge(relativ zu einer Teilmenge).

Die Darstellung von Mengen durch Kreise ist recht praktisch. Sie können schnell beurteilen, in welcher Beziehung verschiedene Sets zueinander stehen.

Aber mathematische Objekte wie Zahlen sind nicht die einzig möglichen Objekte von Mengen. Als Gruppe kann man eine Gruppe von Menschen bezeichnen, die an einer Bushaltestelle stehen und auf ihren Bus warten, oder Bewohner von Wohnungen in einem Haus, einer Stadt oder einem Land. Jede Sammlung beliebiger Objekte, die wir als ein Ganzes betrachten möchten.

Das Wichtigste für uns in der Mengenlehre sind Operationen auf ihnen. Dazu gehören: Addition, Vereinigung, Schnittmenge, Differenz, kartesisches Produkt und einige andere.

Ein einfaches Beispiel. Wenn Sie die Seite einer anderen Person auf Facebook besuchen, zeigt Facebook Ihnen eine Blockierung mit gemeinsamen Freunden an. Wenn wir davon ausgehen, dass Ihre Freunde und die Freunde Ihres Freundes zwei Mengen sind, dann sind gemeinsame Freunde die Menge, die sich als Schnittmenge der ursprünglichen Gruppen von Freunden ergibt.

Wenn Sie sich der Programmierung zuwenden, werden Sie feststellen, dass ein Array einer Menge sehr ähnlich ist und dass man es sich tatsächlich als solches vorstellen kann. Warum ist das so wichtig? Wenn Sie die Prinzipien bestimmter Vorgänge verstehen, können Sie diese am schnellsten und effizientesten umsetzen. Wenn Sie beispielsweise wissen, dass Sie in PHP eine Operation zum Festlegen von Schnittmengen benötigen, können Sie versuchen, eine Funktion zu finden, die diese Aufgabe erledigt. Geben Sie dazu einfach die Suchanfrage in Google ein: PHP-Set überschneidet sich(Satz – Satz, Schnittpunkt – Schnittpunkt). Der erste (zumindest für mich) Link in den Suchergebnissen führt zur gewünschten array_intersect-Funktion. Das Gleiche erwartet Sie auch bei anderen Operationen. Dies ist eine teilweise Antwort auf die Frage „Brauchen Programmierer Mathematik?“

Übrigens verfügen nicht alle Sprachen über integrierte Funktionen zum Arbeiten mit Mengen. In einigen Fällen müssen Sie hierfür zusätzliche Bibliotheken installieren, und in einigen, beispielsweise in Ruby, werden Operationen mit Mengen mithilfe arithmetischer Operatoren (Vereinigung von Mengen: coll1 + coll2) implementiert.

Unabhängig davon ist anzumerken, dass relationale Datenbanken auf den Ideen der relationalen Algebra basieren, in der die Mengenlehre eine zentrale Rolle spielt. Datenbanken sind ein wesentlicher Bestandteil der Webentwicklung und wir werden sie später kennenlernen.

Schauen wir uns die Grundoperationen an:

Überschneidung

Die Schnittmenge von Mengen ist eine Menge, die Elemente enthält, die in allen gegebenen Mengen gleichzeitig vorkommen.

[„vasya“, „petya“]

Diese Funktion akzeptiert eine beliebige Anzahl von Arrays. Das heißt, Sie können den Schnittpunkt einer beliebigen Anzahl von Arrays in einem Aufruf ermitteln.

Einen Verband

Eine Mengenvereinigung ist eine Menge, die Elemente aller gegebenen Mengen enthält. Die Mengenvereinigung in PHP kann nicht mit einem Aufruf durchgeführt werden, sie kann jedoch durch die Verbindung zweier Funktionen simuliert werden:

[„vasya“, „kolya“, „petya“, „igor“, „petya“, „sergey“, „vasya“, „sasha“]; // unique entfernt Duplikate $sharedFriends = array_unique($friends); // => ["vasya", "kolya", "petya", "igor", "sergey", "sasha"]

Addition (Differenz)

Der Unterschied zweier Mengen besteht darin, dass eine Menge Elemente der ersten Menge enthält, die in der zweiten nicht enthalten sind. In der Programmierung wird diese Operation oft aufgerufen diff.

["kolya"]

Zugehörigkeit zur Menge

Mit der Funktion in_array können Sie prüfen, ob ein Element zu einer Menge gehört:

Aufgabe
Es gibt zwei Arrays, und Sie möchten deren Vereinigung (alle Elemente, aber wenn sich ein Element in beiden Arrays befindet, wird es einmal gezählt), Schnittmenge (Elemente in beiden Arrays) oder Differenz (Elemente in einem Array, die nicht in sind) finden das andere).

Lösung
So definieren Sie eine Union:
$union = array_unique(array_merge($a, $b));

So berechnen Sie den Schnittpunkt:
$intersection = array_intersection($a, $b);

Um einen einfachen Unterschied zu finden:
$difference = array_diff($a, $b);

Und um die symmetrische Differenz zu erhalten (exklusives ODER):

Diskussion
Viele der für solche Berechnungen erforderlichen Komponenten sind in PHP integriert; Sie müssen sie nur in der richtigen Reihenfolge kombinieren.

Wenn eine Vereinigung aus zwei Arrays erstellt wird, wird ein riesiges Array mit allen Werten der ursprünglichen Arrays erstellt. Da die Funktion array_merge() jedoch beim Zusammenführen zweier numerischer Arrays doppelte Werte zulässt, müssen Sie die Funktion array_unique() aufrufen.
solche Elemente herauszufiltern.

Dabei kann es jedoch zu Lücken kommen, da die Funktion array_unique() das Array nicht komprimiert. Dies stellt jedoch kein Problem dar, da sowohl die foreach-Anweisung als auch die Funktion every() dünn besiedelte Arrays störungsfrei verarbeiten.

Die Funktion zur Schnittpunktberechnung heißt schlicht array_intersection() und erfordert keinen zusätzlichen Aufwand.

Die Funktion array_diff() gibt ein Array zurück, das alle eindeutigen Elemente des $old-Arrays enthält, die nicht im $new-Array enthalten sind. Dies nennt man einen einfachen Unterschied:


$difference = array_diff($old, $new);
Array
=> nicht
=> zu
)

Das resultierende $difference-Array enthält „not“ und „to“, da bei array_diff() die Groß-/Kleinschreibung beachtet wird. Das Element „whatever“ ist nicht enthalten, da es nicht im $old-Array enthalten ist.

Um die umgekehrte Differenz zu erhalten, oder mit anderen Worten, um die eindeutigen Elemente des $new-Arrays zu finden, die im $old-Array fehlen, müssen Sie die Argumente vertauschen:
$old = array("To", "be", "or", "not", "to", "be");
$new = array("To", "be", "or", "whatever");
$reverse_diff = array_diff($new, $old);
Array
=> was auch immer
)

Das Array $reverse_diff enthält nur das Element „whatever“.

Wenn Sie eine Funktion oder einen anderen Filter in der Funktion array_diff() anwenden müssen, betten Sie Ihren eigenen Differenzalgorithmus (Subtraktionsalgorithmus) ein:

// einen Subtraktionsalgorithmus anwenden, bei dem die Groß-/Kleinschreibung nicht berücksichtigt wird; Unterschied -i
$seen = array();
foreach ($new as $n) (
$seen++;
}
foreach ($old as $o) (
$o = strtolower($o);
if (!$seen[$o]) ( $diff[$o] = $o; )
}

Die erste foreach-Anweisung erstellt ein assoziatives Array für die weitere Suche.

Dann durchläuft es das Array $old und wird, wenn das Element während der Suche nicht gefunden wird, zum Array $diff hinzugefügt.

Dieser Prozess kann durch die Kombination der Funktionen array_diff() und array_map() beschleunigt werden:

$diff = array_diff(array_map("strtolower", $old),
array_map("strtolower", $new));

Der symmetrische Unterschied besteht darin, was in $a, aber nicht in $b ist, plus dem, was in $b, aber nicht in $a ist:

$difference = array_merge(array_diff($a, $b), array_diff($b, $a));

Sobald der Algorithmus etabliert ist, geht er weiter. Die Funktion array_diff() wird zweimal aufgerufen und ermittelt zwei Unterschiede. Anschließend werden sie zu einem Array zusammengefasst. Es besteht keine Notwendigkeit, array_unique() aufzurufen, da diese Arrays speziell dafür konzipiert wurden, keine gemeinsamen Elemente zu haben.

Mit diesen Funktionen können Sie Arrays auf verschiedene Arten bearbeiten. Arrays eignen sich ideal zum Speichern, Ändern und Arbeiten mit Variablensätzen.

Es werden ein- und mehrdimensionale Arrays unterstützt, die sowohl vom Benutzer erstellt als auch als Ergebnis von einer Funktion zurückgegeben werden. Für die Arbeit mit Datenbanken gibt es spezielle Funktionen, die die Arbeit mit Datenarrays erleichtern, die als Ergebnis der Ausführung von Abfragen zurückgegeben werden. Es gibt auch Funktionen, die Arrays als Ergebnisse zurückgeben.

Weitere Informationen zum Erstellen und Verwenden von Arrays in PHP finden Sie im Kapitel „Arrays“ dieses Tutorials.

Installation

Für die Nutzung dieser Funktionen ist keine Installation erforderlich, da sie Teil des PHP-Kerns sind.

Vordefinierte Konstanten

Die unten aufgeführten Konstanten sind immer als Teil des PHP-Kerns verfügbar.

CASE_LOWER(ganze Zahl)

CASE_LOWER mit Funktion verwendet array_change_key_case() um anzugeben, ob Array-Schlüssel in Kleinbuchstaben umgewandelt werden sollen. Standardfunktion array_change_key_case() Diese Konstante wird verwendet.

CASE_UPPER(ganze Zahl)

CASE_UPPER mit Funktion verwendet array_change_key_case() um anzugeben, ob Array-Schlüssel in Großbuchstaben umgewandelt werden sollen.

array_change_key_case – Gibt ein Array zurück, dessen Zeichenschlüssel in Groß- oder Kleinbuchstaben umgewandelt werden array_chunk – Teilt ein Array in Blöcke auf array_combine – Erstellt ein neues Array mit einem Array als Schlüssel und einem anderen als entsprechenden Werten array_count_values ​​​​- – Zählen Sie die Anzahl aller Werte. array_diff_assoc – Berechnen Sie die Array-Divergenz mit zusätzlicher Indexprüfung. array_diff_key – Berechnen Sie die Array-Divergenz durch Vergleichen von Schlüsseln. array_diff_uassoc – Berechnen Sie die Array-Divergenz mit zusätzlicher Indexprüfung, die mit einer benutzerdefinierten Funktion durchgeführt wird. array_diff_ukey – Berechnen Sie die Array-Divergenz mit Schlüsselvergleichsrückruf array_diff – Array-Divergenz berechnen array_fill – Ein Array mit einem bestimmten Wert füllen array_filter – Mit dem array_flip-Rückruf einen Filter auf ein Array anwenden – Array-Werte austauschen array_intersect_assoc – Array-Konvergenz mit zusätzlicher Indexprüfung berechnen array_intersect_key – Berechnen Sie die Array-Schnittmenge durch den Vergleich von Schlüsseln array_intersect_uassoc – Berechnen Sie die Array-Schnittmenge mit zusätzlicher Indexprüfung mithilfe der benutzerdefinierten Funktion array_intersect_ukey – Berechnen Sie die Array-Schnittmenge mithilfe des Schlüsselvergleichsrückrufs array_intersect – Berechnen Sie die Array-Konvergenz array_key_exists – Überprüfen Sie, ob der angegebene Schlüssel oder Index vorhanden ist ist im Array vorhanden array_keys – Alle Schlüssel im Array auswählen array_map – Eine Rückruffunktion auf alle Elemente der angegebenen Arrays anwenden array_merge_recursive – Zwei oder mehr Arrays rekursiv zusammenführen array_merge – Zwei oder mehr Arrays zusammenführen array_multisort – Mehrere sortieren Arrays oder mehrdimensionale Arrays array_pad – Erhöhen Sie die Größe eines Arrays auf einen bestimmten Wert. array_pop – Rufen Sie das letzte Element eines Arrays ab. array_product – Berechnen Sie das Produkt von Array-Werten. array_push – Fügen Sie ein oder mehrere Elemente am Ende von hinzu ein Array array_rand – Wählen Sie einen oder mehrere Zufallswerte aus array_reduce – Reduzieren Sie ein Array mithilfe der Rückruffunktion iterativ auf einen einzelnen Wert array_reverse – Gibt ein Array mit Elementen in umgekehrter Reihenfolge zurück array_search – Durchsucht das Array nach einem bestimmten Wert und gibt bei Erfolg den entsprechenden Schlüssel zurück. array_shift – Ruft das erste Element des Arrays ab. array_slice – – Wählt einen Ausschnitt eines Arrays aus. array_splice – Entfernt eine Folge von Array-Elementen und ersetzt sie durch eine andere Folge. array_sum – Berechnet die Summe der Array-Werte ​​array_udiff_assoc – Berechnen Sie die Divergenz in Arrays mit zusätzlicher Indexprüfung und verwenden Sie die Rückruffunktion array_udiff_uassoc, um Werte zu vergleichen. – Berechnen Sie die Divergenz in Arrays mit zusätzlicher Indexprüfung und verwenden Sie die Rückruffunktion array_udiff, um Werte und Indizes zu vergleichen. – Berechnen Array-Divergenz mit der Callback-Funktion array_uintersect_assoc zum Vergleich – Berechnen Sie die Array-Schnittmenge mit zusätzlicher Indexprüfung und vergleichen Sie Werte mit der Callback-Funktion array_uintersect_uassoc – Berechnen Sie die Array-Schnittmenge mit zusätzlicher Indexprüfung mit der Callback-Funktion array_uintersect zum Vergleichen von Indizes und Werten – – Berechnen Sie die Schnittmenge von Arrays mithilfe des Rückrufs array_unique, um Werte zu vergleichen – Entfernen Sie doppelte Werte aus einem Array array_unshift – Fügen Sie ein oder mehrere Elemente am Anfang des Arrays hinzu array_values ​​​​– Wählen Sie alle Werte von aus ein Array array_walk_recursive – Eine benutzerdefinierte Funktion rekursiv auf jedes Element des Arrays anwenden array_walk – Eine benutzerdefinierte Funktion auf jedes Element des Arrays anwenden array – Ein Array erstellen arsort – Das Array in umgekehrter Reihenfolge sortieren und dabei die Schlüssel beibehalten asort – - Sortieren Sie das Array und bewahren Sie die Schlüssel kompakt. - Erstellen Sie ein Array mit Variablennamen und ihren Werten