Position actuelle: Accueil> Derniers articles> array_filter () est utilisé pour implémenter un filtrage de correspondance complexe avec des expressions régulières

array_filter () est utilisé pour implémenter un filtrage de correspondance complexe avec des expressions régulières

M66 2025-06-04

Dans le développement de PHP, nous devons souvent filtrer les éléments qui remplissent des conditions spécifiques d'un tableau. Array_Filter () est un outil puissant pour gérer cette exigence, et les expressions régulières peuvent être utiles lorsque vous souhaitez effectuer des correspondances plus complexes (telles que la reconnaissance de motifs, le filtrage des mots clés, etc.).

Cet article présentera comment utiliser array_filter () avec des expressions régulières pour réaliser une correspondance et un filtrage de tableau plus flexibles.

1. Introduction à array_filter ()

Array_Filter () est une fonction intégrée fournie par PHP, qui est utilisée pour filtrer les éléments dans un tableau basé sur la valeur de retour de la fonction de rappel. La syntaxe de base est la suivante:

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array
  • $ Array : Le tableau d'origine à filtrer.

  • $ rappel : la fonction de rappel utilisée pour tester chaque valeur du tableau, renvoie true dans la réserve et renvoie false pour être supprimé.

  • MODE $ : Facultatif, pour spécifier de passer une valeur clé, un nom de clé ou les deux.

Si $ rappel n'est pas passé, array_filter () supprime les valeurs équivalentes à false dans le tableau (comme 0 , false , '' , null , etc.).

2. Scénarios d'utilisation typiques qui combinent des expressions régulières

Voici plusieurs scénarios typiques. Nous utiliserons array_filter () avec preg_match () (fonction de correspondance régulière) pour terminer l'opération de filtrage.

1. CONDITIONS DE FILTRES CONTANT des mots clés spécifiques

Supposons que nous ayons une liste d'URL et que nous voulions trouver le lien qui contient le champ de connexion :

 $urls = [
    'https://m66.net/login',
    'https://m66.net/register',
    'https://m66.net/user/profile',
    'https://m66.net/logout',
    'https://m66.net/help/login-guide'
];

$filtered = array_filter($urls, function($url) {
    return preg_match('/login/i', $url);
});

print_r($filtered);

Résultat de sortie:

 Array
(
    [0] => https://m66.net/login
    [4] => https://m66.net/help/login-guide
)

Description: / Login / I signifie faire correspondre un «connexion» insensible à la casse.

2. Filtrez les chaînes de sortie au format de boîte aux lettres

 $data = [
    'john@example.com',
    'https://m66.net/contact',
    'not-an-email',
    'user@domain.net',
    'hello@m66.net'
];

$emails = array_filter($data, function($item) {
    return preg_match('/^[\w\.-]+@[\w\.-]+\.\w{2,}$/', $item);
});

print_r($emails);

Résultat de sortie:

 Array
(
    [0] => john@example.com
    [3] => user@domain.net
    [4] => hello@m66.net
)

3. Faites correspondre les chaînes en commençant par les nombres

 $items = ['123start', 'alpha', '42beta', 'm66.net', '99bottles'];

$startsWithDigit = array_filter($items, function($str) {
    return preg_match('/^\d/', $str);
});

print_r($startsWithDigit);

Résultat de sortie:

 Array
(
    [0] => 123start
    [2] => 42beta
    [4] => 99bottles
)

3. Compétences avancées: correspondance multi-conditions

Vous pouvez également créer une logique de correspondance plus complexe grâce à des combinaisons d'expressions régulières. Par exemple, faire correspondre les URL qui contiennent à la fois "connexion" et se terminer avec .net :

 $urls = [
    'https://m66.net/login',
    'https://m66.net/login-help.net',
    'https://m66.net/home',
    'https://m66.net/logout',
    'https://m66.net/login/info'
];

$matched = array_filter($urls, function($url) {
    return preg_match('/login.*\.net$/i', $url);
});

print_r($matched);

4. Choses à noter

  1. Problème d'efficacité d'expression régulière : les expressions régulières complexes peuvent affecter les performances lors du traitement de grands tableaux. Il est recommandé de mettre en cache des résultats intermédiaires ou d'optimiser les expressions.

  2. Matchage des caractères Unicode : le modificateur U doit être activé, tel que / motif / u .

  3. Traitement des tableaux multidimensionnels : Pour les tableaux multidimensionnels, Array_Filter () ne traite que la dimension unidimensionnelle par défaut. Si un filtrage plus profond est requis, vous pouvez utiliser des fonctions récursives pour le gérer.

5. Résumé

En combinant array_filter () avec preg_match () , les développeurs PHP peuvent facilement implémenter la logique de filtrage du tableau complexe. Cette méthode est non seulement concise en syntaxe, mais a également une efficacité d'exécution élevée. Il convient à divers scénarios tels que le nettoyage des données, la vérification des entrées et le filtrage de l'URL.

La maîtrise de cette compétence améliorera considérablement vos capacités de traitement des données dans les projets réels!