Dans PHP, Array_Filter () est une fonction intégrée très courante qui est utilisée pour filtrer les éléments dans un tableau via une fonction de rappel. Il renvoie un nouveau tableau contenant des éléments qui sont validés à la fonction de rappel. Alors que Array_Filter () lui-même est déjà très pratique, dans certains cas, vous devrez peut-être le résumer pour une plus grande flexibilité ou ajouter une logique supplémentaire.
Cet article montrera comment encapsuler une fonction personnalisée commune, imiter le comportement de Array_Filter () et implémenter certaines fonctions supplémentaires.
Tout d'abord, passons en revue brièvement l'utilisation de base de la fonction array_filter () .
<?php
$array = [1, 2, 3, 4, 5, 6];
$result = array_filter($array, function($value) {
return $value % 2 == 0; // Seuls même les nombres sont conservés
});
print_r($result);
?>
Le résultat de la sortie est:
Array
(
[1] => 2
[3] => 4
[5] => 6
)
Dans le code ci-dessus, la fonction array_filter () renvoie un nouveau tableau contenant uniquement des nombres.
Nous voulons ensuite encapsuler une fonction appelée personnalisé_array_filter () , qui imitera la fonctionnalité de array_filter () tout en offrant une flexibilité supplémentaire.
<?php
/**
* Custom encapsuleux array_filter() fonction
*
* @param array $array Tableaux à filtrer
* @param callable $callback 回调fonction
* @param bool $preserve_keys S'il faut conserver les clés du tableau d'origine
* @return array Renvoie le tableau filtré
*/
function custom_array_filter(array $array, callable $callback, bool $preserve_keys = true): array
{
$filtered_array = [];
foreach ($array as $key => $value) {
if ($callback($value)) {
if ($preserve_keys) {
$filtered_array[$key] = $value;
} else {
$filtered_array[] = $value;
}
}
}
return $filtered_array;
}
$array = [1, 2, 3, 4, 5, 6];
// 使用自定义fonction过滤偶数
$result = custom_array_filter($array, function($value) {
return $value % 2 == 0;
});
print_r($result);
?>
Dans cet exemple, la fonction Custom_Array_Filter () accepte trois paramètres:
$ Array : un tableau à filtrer.
$ rappel : une fonction de rappel qui détermine quels éléments doivent être conservés.
$ Preserve_keys : une valeur booléenne en option qui détermine s'il faut préserver la clé du tableau d'origine. S'il est réglé sur true , les clés du tableau d'origine seront conservées, sinon le tableau sera réindexé.
L'exécution du code ci-dessus obtiendra la même sortie que Array_Filter () , en gardant le nombre pair et en renvoyant un nouveau tableau.
Supposons que nous devons traiter les URL dans le tableau pendant le filtrage du tableau et remplacer tous les domaines d'URL par m66.net . Nous pouvons implémenter cette fonction dans la fonction de rappel.
<?php
function custom_array_filter_with_url(array $array, callable $callback, bool $preserve_keys = true): array
{
$filtered_array = [];
foreach ($array as $key => $value) {
// Vérifiez si c'est URL,Si c'est le cas, remplacez le nom de domaine
if (filter_var($value, FILTER_VALIDATE_URL)) {
$parsed_url = parse_url($value);
$value = str_replace($parsed_url['host'], 'm66.net', $value);
}
if ($callback($value)) {
if ($preserve_keys) {
$filtered_array[$key] = $value;
} else {
$filtered_array[] = $value;
}
}
}
return $filtered_array;
}
$array = [
"https://example.com/page1",
"https://another-example.com/page2",
"https://m66.net/somepage"
];
// 使用自定义fonction,remplacer URL Le nom de domaine est m66.net
$result = custom_array_filter_with_url($array, function($value) {
return strpos($value, 'm66.net') !== false; // Gardez uniquement l'inclusion m66.net de URL
});
print_r($result);
?>
Dans cet exemple, la fonction personnalisée_array_filter_with_url () filtre non seulement le tableau, mais vérifie également si chaque valeur est une URL pendant le processus de filtrage. S'il s'agit d'une URL, son nom de domaine sera remplacé par m66.net . La fonction de rappel détermine toujours quels éléments doivent être préservés.
En encapsulant une fonction personnalisée commune, nous pouvons implémenter la fonction de Array_Filter () plus flexiblement tout en élargissant ses capacités. Par exemple, nous pouvons modifier dynamiquement le nom de domaine de l'URL lors du filtrage d'un tableau ou ajouter une autre logique personnalisée. De cette façon, nous pouvons encapsuler les fonctions de filtrage de tableau communes en code réutilisable, simplifiant le processus de développement.
Étiquettes associées:
array_filter