Position actuelle: Accueil> Derniers articles> La rétention du nom de clé est ignorée lors de l'utilisation de Array_Filter ()

La rétention du nom de clé est ignorée lors de l'utilisation de Array_Filter ()

M66 2025-05-17

Dans PHP, la fonction Array_Filter () est un outil de traitement de tableau courant utilisé pour filtrer les éléments dans un tableau. La fonction Array_Filter () accepte une fonction de rappel et un tableau sous forme de paramètres et renvoie un nouveau tableau contenant tous les éléments qui remplissent les conditions de fonction de rappel.

Par défaut, Array_Filter () conserve le nom de clé (indice) du tableau filtré. Cependant, de nombreux développeurs peuvent constater que les noms clés ne sont pas conservés ou que certaines situations inattendues peuvent se produire lors de leur utilisation. Alors, pourquoi ce phénomène se produit-il?

1. Le comportement de Array_Filter ()

La fonction de base de Array_Filter () est de déterminer quels éléments sont conservés en fonction de la valeur de retour de la fonction de rappel. L'élément qui renvoie True sera conservé, tandis que l'élément qui retourne faux sera supprimé. Sa syntaxe est la suivante:

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

  • $ rappel : une fonction de rappel pour le filtrage. S'il est omis, toutes les valeurs qui ne sont pas vides seront conservées par défaut.

  • $ mode : un paramètre facultatif qui peut contrôler la méthode d'indexation du tableau, généralement array_filter_use_key ou array_filter_use_both .

2. Par défaut, array_filter () conserve le nom de la clé

Lorsque nous appelons array_filter () , il conserve le nom de clé d'origine de l'élément de tableau. Par exemple, considérez l'exemple suivant:

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
    return strlen($value) > 5;
});

print_r($result);

La sortie sera:

 Array
(
    [1] => orange
    [2] => banana
)

Comme vous pouvez le voir, les noms de clés d'origine (1 et 2) sont conservés.

3. Le cas où array_filter () ignore les noms de clés

Mais dans certains cas, si vous constatez que Array_Filter () ne conserve pas le nom de la clé, c'est généralement parce que le mode Array_Filter_use_key ou Array_Filter_Use_Both est utilisé lors de l'appel, ou la fonction de rappel renvoie une valeur différente.

Jetons un coup d'œil à cet exemple:

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($key) {
    return $key > 0;
}, ARRAY_FILTER_USE_KEY);

print_r($result);

Ce code sera sorti:

 Array
(
    [1] => orange
    [2] => banana
)

Bien que nous utilisions ici le modèle Array_Filter_Use_Key , les noms de clés sont toujours conservés car nous filtrons les valeurs de clé plutôt que les valeurs de l'élément réel.

4. Pourquoi Array_Filter () ignore-t-il la rétention des noms de clés?

array_filter () ne filtre que les valeurs du tableau par défaut, sans modifier les clés du tableau. Si vous utilisez array_filter_use_key ou array_filter_use_both , le nom de clé peut être recalculé ou réinitialisé. Cela est dû à la logique de traitement interne de PHP, en particulier lors de l'utilisation de différents modes de filtrage, la valeur de retour peut affecter la rétention des noms de clés.

5. Solution: reconstruire l'index

Si vous souhaitez que le tableau filtré régénére les noms de clés consécutifs, vous pouvez utiliser array_values ​​() pour reconstruire l'index:

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
    return strlen($value) > 5;
});
$result = array_values($result);

print_r($result);

Sortir:

 Array
(
    [0] => orange
    [1] => banana
)

Comme vous pouvez le voir, après avoir utilisé array_values ​​() , les touches de tableau sont réindexées, ce qui entraîne des noms de clés successifs à partir de 0.

6. Résumé

array_filter () conserve les noms de clés par défaut, mais les noms de clés peuvent se produire dans des modes spécifiques, en particulier lors de l'utilisation de Array_Filter_Use_Key ou Array_Filter_Use_Both . Si vous devez réinitialiser le nom de clé, vous pouvez le résoudre par array_values ​​() .

J'espère que cet article sera utile pour votre compréhension du comportement de Array_Filter () !