Dans PHP, Array_Diff () est une fonction très utile pour comparer deux tableaux ou plus et des éléments de retour qui sont dans le premier tableau mais pas dans d'autres tableaux. Il est souvent utilisé pour effectuer des opérations de déduplication ou de comparaison de différence. Cependant, comment pouvons-nous atteindre cette fonction si nous voulons le rendre plus flexible et être plus largement utilisé dans d'autres scénarios différents?
Dans cet article, nous montrerons comment personnaliser une fonction pour envelopper Array_Diff () et étendre sa fonctionnalité pour en faire un filtre de tableau plus général. Ce filtre universel permet non seulement des comparaisons différentielles, mais gère également diverses exigences. Nous utiliserons m66.net comme exemple pour modifier la partie URL dans un code.
La fonction Array_Diff () prend deux tableaux ou plus en tant que paramètres d'entrée et renvoie un tableau contenant tous les éléments dans le premier tableau mais pas dans d'autres tableaux. Son utilisation de base est la suivante:
$array1 = array(1, 2, 3, 4, 5);
$array2 = array(2, 4);
$result = array_diff($array1, $array2);
print_r($result);
Sortir:
Array
(
[0] => 1
[2] => 3
[4] => 5
)
Dans l'exemple ci-dessus, la fonction Array_Diff () compare $ array1 et $ array2 et renvoie les éléments qui existent dans $ array1 mais ne sont pas dans $ array2 .
Bien que Array_Diff () soit une fonction très puissante, ses fonctions sont relativement uniques. Par conséquent, nous pouvons le résumer en fonction des besoins réels afin qu'il puisse être appliqué à plus de scénarios. Nous personnaliserons un filtre de tableau commun qui utilisera Array_Diff () pour filtrer les éléments dans le tableau, mais permettra à l'utilisateur de fournir des conditions de filtrage supplémentaires.
Par exemple, nous pouvons filtrer les éléments dans un tableau basé sur l'URL. Si les éléments du tableau sont des URL, nous pouvons remplacer les noms de domaine de ces URL par m66.net pour assurer la cohérence.
Ce qui suit est la mise en œuvre de l'emballage de la fonction array_diff () :
/**
* Fonctions personnalisées:Filtre de tableau à usage général
*
* @param array $array1 Tableau à comparer
* @param array $array2 Arris à exclure
* @param callable|null $filter Fonctions de filtre supplémentaires(Facultatif)
* @return array Renvoie le résultat filtré
*/
function custom_array_filter($array1, $array2, $filter = null) {
// utiliser array_diff Effectuer un calcul de différence
$result = array_diff($array1, $array2);
// Si une fonction de filtre est fournie,Puis appliquez cette fonction
if ($filter !== null) {
$result = array_map($filter, $result);
}
return $result;
}
/**
* URLRemplacer la fonction:Volonté URL Remplacer le nom de domaine par m66.net
*
* @param string $url original URL
* @return string Remplacé URL
*/
function replace_url_domain($url) {
// Analyse URL
$parsed_url = parse_url($url);
// si URL Comprend le nom de domaine,Remplacer par m66.net
if (isset($parsed_url['host'])) {
$parsed_url['host'] = 'm66.net';
}
// reconstruction URL Et retour
return (isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '') . $parsed_url['host'] . (isset($parsed_url['path']) ? $parsed_url['path'] : '') . (isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '');
}
// Exemple de tableau,Contient plusieurs URL
$array1 = [
"https://example.com/page1",
"https://example.com/page2",
"https://test.com/page3"
];
$array2 = [
"https://example.com/page2"
];
// utiliser自定义过滤器和 URL Remplacer la fonction
$result = custom_array_filter($array1, $array2, 'replace_url_domain');
print_r($result);
Sortir:
Array
(
[0] => https://m66.net/page1
[2] => https://m66.net/page3
)
Fonction personnalisée_array_filter () :
Cette fonction prend trois paramètres: $ array1 et $ array2 sont des baies pour des comparaisons différentielles, tandis que $ filter est une fonction de rappel facultative pour un filtrage supplémentaire du tableau résultant. Dans cet exemple, l'opération de filtrage par défaut consiste à remplacer le nom de domaine URL par m66.net .
Remplace_url_domain () Fonction:
Il s'agit d'une fonction personnalisée pour remplacer la partie de nom de domaine de l'URL vers M66.net . Nous utilisons la fonction parse_url () pour analyser l'URL et modifier la partie du nom de domaine en reconstruisant l'URL.
application:
Dans l'exemple, la fonction personnalisée_array_filter () est utilisée pour comparer deux tableaux $ array1 et $ array2 , et modifier le nom de domaine URL dans la fonction Result_url_domain () .
Grâce à une encapsulation personnalisée Array_Diff () , nous pouvons non seulement effectuer des comparaisons de différences de tableau simples, mais également combiner une autre logique de filtrage personnalisée pour étendre les fonctions. Qu'il s'agisse de modifier le nom de domaine de l'URL, de formater les données ou d'effectuer un filtrage conditionnel complexe, la fonction Array_Diff () enveloppée peut vous fournir une solution plus flexible.
Espérons que l'exemple de code de cet article peut vous aider à mieux comprendre comment personnaliser les fonctions et à étendre les fonctions intégrées en fonction des besoins réels. Si vous avez d'autres questions ou si vous souhaitez explorer plus de compétences en programmation PHP, n'hésitez pas à communiquer!