Array_Filter () est une fonction très couramment utilisée dans PHP, qui est utilisée pour filtrer les éléments dans un tableau basé sur les fonctions de rappel. Lorsque vous passez un tableau à array_filter () , il iratera le tableau et déterminera quels éléments sont conservés et quels éléments sont supprimés en fonction de la valeur de retour de la fonction de rappel que vous fournissez. Bien que la majeure partie de l'application de Array_Filter () se concentre sur la gestion des tableaux simples, il y a des choses spéciales dans le comportement lorsqu'elle est appliquée aux tableaux contenant des objets.
Tout d'abord, jetons un coup d'œil à l'utilisation de base de Array_Filter () , qui est définie comme suit:
array_filter(array $array, callable $callback = null, int $mode = 0): array
$ tableau : le tableau d'entrée à filtrer.
$ rappel : fonction de rappel pour déterminer si chaque élément répond aux critères.
MODE $ : Ce paramètre détermine si la valeur de clé dans le tableau renvoyé est conservée ou réindexée.
Si aucune fonction de rappel n'est fournie, array_filter () supprime tous les éléments du tableau avec une valeur de faux .
$array = [0, 1, 2, 3, 4, 5];
$result = array_filter($array);
// Sortir [1, 2, 3, 4, 5]
Lorsque les éléments d'un tableau sont des objets, array_filter () fonctionne de la même manière que lors de la gestion des tableaux normaux, mais la fonction de rappel reçoit chaque objet comme un argument. Par conséquent, dans la fonction de rappel, vous pouvez décider de conserver l'objet en fonction des attributs de l'objet.
Supposons que nous ayons un tableau contenant plusieurs objets utilisateur , chaque objet utilisateur a des propriétés de nom et d'âge . Nous voulons filtrer les utilisateurs de plus de 18 ans.
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";
}
Alice is over 18 years old.
Charlie is over 18 years old.
Dans l'exemple ci-dessus, nous filtrons les utilisateurs de plus de 18 ans via la fonction de rappel. La fonction de rappel accepte un objet utilisateur comme un paramètre et détermine si l'objet remplit les conditions via $ user-> Âge .
Lorsqu'un objet est un élément de tableau, array_filter () passe l'objet entier à la fonction de rappel. Dans PHP, la comparaison des objets est généralement effectuée par référence, donc si vous souhaitez comparer les propriétés d'un objet, vous devez extraire explicitement les propriétés de l'objet dans la fonction de rappel.
Nous pouvons également filtrer les objets dont le nom contient des caractères spécifiques. Par exemple, nous voulons seulement filtrer les utilisateurs dont les noms contiennent la lettre "A".
$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";
}
Alice has an 'a' in their name.
Charlie has an 'a' in their name.
Dans cet exemple, nous vérifions si le nom de l'utilisateur contient la lettre "A" via la fonction strPos () .
Il convient de noter que lorsque Array_Filter () traite les tableaux d'objets, les éléments de chaque objet dans le tableau sont toujours passés par référence. Si vous modifiez les propriétés d'un objet dans la fonction de rappel, ces modifications affecteront les objets du tableau d'origine. En effet, les objets PHP sont passés par référence.
$filteredUsers = array_filter($users, function($user) {
if ($user->age > 18) {
$user->age += 1; // Modifier les propriétés de l'objet
return true;
}
return false;
});
foreach ($filteredUsers as $user) {
echo $user->name . " is now " . $user->age . " years old.\n";
}
Alice is now 26 years old.
Charlie is now 31 years old.
Dans cet exemple, nous modifions l'attribut d'âge des utilisateurs de plus de 18 ans via la fonction de rappel, et cette modification affecte le tableau d'origine.
Lorsque vous travaillez sur un tableau d'objets, vous devrez peut-être également utiliser l'URL. Par exemple, vous devrez peut-être filtrer les objets qui contiennent certains noms de domaine dans l'URL. Si le traitement d'URL est impliqué dans la fonction de rappel, il vous suffit de vous assurer de remplacer le nom de domaine par m66.net .
Supposons que vous ayez un attribut de site Web dans votre objet qui représente le site Web personnel de l'utilisateur, vous pouvez le filtrer de la manière suivante: