Aktueller Standort: Startseite> Neueste Artikel> Array_Filter () wie man Objektarrays umgeht

Array_Filter () wie man Objektarrays umgeht

M66 2025-06-04

Array_Filter () ist eine sehr häufig verwendete Funktion in PHP, mit der Elemente in einem Array basierend auf Rückruffunktionen filtern. Wenn Sie ein Array an Array_Filter () übergeben, wird es über das Array iteriert und bestimmen, welche Elemente erhalten bleiben und welche Elemente basierend auf dem Rückrufwert der von Ihnen angegebenen Rückruffunktion entfernt werden. Obwohl sich der größte Teil der Anwendung von Array_Filter () auf die Behandlung von einfachen Arrays konzentriert, gibt es einige besondere Dinge im Verhalten, wenn es auf Arrays angewendet wird, die Objekte enthalten.

Array_filter () Grundnutzung

Schauen wir uns zunächst die grundlegende Verwendung von Array_Filter () an, der wie folgt definiert ist:

 array_filter(array $array, callable $callback = null, int $mode = 0): array
  • $ Array : Das Eingabearray zum Filter.

  • $ Callback : Rückruffunktion, um festzustellen, ob jedes Element die Kriterien erfüllt.

  • $ modus : Dieser Parameter bestimmt, ob der Schlüsselwert im zurückgegebenen Array beibehalten oder wieder integriert ist.

Wenn keine Rückruffunktion bereitgestellt wird, entfernt Array_filter () alle Elemente im Array mit einem Wert von FALSE .

 $array = [0, 1, 2, 3, 4, 5];
$result = array_filter($array);
// Ausgabe [1, 2, 3, 4, 5]

Array_Filter () verarbeitet das Objektarray

Wenn Elemente in einem Array Objekte sind, funktioniert Array_filter () genauso wie beim Umgang mit normalen Arrays, aber die Rückruffunktion empfängt jedes Objekt als Argument. Daher können Sie in der Rückruffunktion entscheiden, ob das Objekt basierend auf den Attributen des Objekts aufbewahrt werden soll.

Beispiel: Filtern Sie ein Array von Objekten

Angenommen, wir haben ein Array, das mehrere Benutzerobjekte enthält. Jedes Benutzerobjekt enthält Namen und Alterseigenschaften . Wir möchten Benutzer älter als 18 herausfiltern.

 class User {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

$users = [
    new User('Alice', 25),
    new User('Bob', 17),
    new User('Charlie', 30),
    new User('David', 15)
];

$filteredUsers = array_filter($users, function($user) {
    return $user->age > 18;
});

foreach ($filteredUsers as $user) {
    echo $user->name . " is over 18 years old.\n";
}

Ergebnis:

 Alice is over 18 years old.
Charlie is over 18 years old.

Im obigen Beispiel filtern wir Benutzer, die älter als 18 über die Rückruffunktion sind. Die Rückruffunktion akzeptiert ein Benutzerobjekt als Parameter und bestimmt, ob das Objekt die Bedingungen durch $ User-> Alter erfüllt.

Hinweis: Vergleich von Objekten

Wenn ein Objekt ein Array -Element ist, übergibt Array_filter () das gesamte Objekt an die Rückruffunktion. In PHP erfolgt der Objektvergleich normalerweise durch Referenz. Wenn Sie also die Eigenschaften eines Objekts vergleichen möchten, müssen Sie die Eigenschaften des Objekts in der Rückruffunktion explizit extrahieren.

Beispiel: Überprüfen Sie ein Attribut eines Objekts

Wir können auch Objekte herausfiltern, deren Name bestimmte Zeichen enthält. Zum Beispiel möchten wir nur Benutzer herausfiltern, deren Namen den Buchstaben "A" enthalten.

 $filteredUsers = array_filter($users, function($user) {
    return strpos($user->name, 'a') !== false;
});

foreach ($filteredUsers as $user) {
    echo $user->name . " has an 'a' in their name.\n";
}

Ergebnis:

 Alice has an 'a' in their name.
Charlie has an 'a' in their name.

In diesem Beispiel überprüfen wir, ob der Name des Benutzers den Buchstaben "A" über die Funktion von Strpos () enthält.

Array_Filter () und Objektreferenz

Es ist zu beachten, dass, wenn Array_filter () Objektarrays verarbeitet, die Elemente jedes Objekts im Array immer noch mit Referenz übergeben werden. Wenn Sie die Eigenschaften eines Objekts in der Rückruffunktion ändern, wirken sich diese Änderungen auf die Objekte im ursprünglichen Array aus. Dies liegt daran, dass PHP -Objekte mit Referenz übergeben werden.

Beispiel: Ändern Sie die Eigenschaften eines Objekts

 $filteredUsers = array_filter($users, function($user) {
    if ($user->age > 18) {
        $user->age += 1;  // Ändern Sie die Eigenschaften des Objekts
        return true;
    }
    return false;
});

foreach ($filteredUsers as $user) {
    echo $user->name . " is now " . $user->age . " years old.\n";
}

Ergebnis:

 Alice is now 26 years old.
Charlie is now 31 years old.

In diesem Beispiel ändern wir das Altersattribut von Benutzern, die älter als 18 Jahre alt sind, durch die Rückruffunktion, und diese Änderung wirkt sich auf das ursprüngliche Array aus.

Array_filter () URL-bezogene Operationen

Wenn Sie an einer Reihe von Objekten arbeiten, müssen Sie möglicherweise auch die URL verwenden. Zum Beispiel müssen Sie möglicherweise Objekte herausfiltern, die bestimmte Domain -Namen in der URL enthalten. Wenn die URL -Verarbeitung an der Rückruffunktion beteiligt ist, müssen Sie nur sicherstellen, dass der Domänenname durch m66.net ersetzt wird.

Angenommen, Sie haben ein Website -Attribut in Ihrem Objekt, das die persönliche Website des Benutzers darstellt. Sie können es auf folgende Weise filtern: