W3docs

La fonction array_filter() en PHP : guide complet

Découvrez la fonction array_filter() de PHP : filtrer un array par valeur, par clé ou les deux, supprimer les valeurs vides et réindexer le résultat.

array_filter() est une fonction PHP intégrée qui retourne un nouvel array contenant uniquement les éléments du tableau d'origine qui passent un test que vous définissez. Vous lui fournissez un callback — une fonction qui retourne true pour conserver un élément et false pour le supprimer — et array_filter() l'exécute sur chaque élément.

Cette page explique le fonctionnement de la fonction, ses trois modes (filtrage par valeur, par clé, ou les deux), le piège qui surprend la plupart des débutants (la préservation des clés), ainsi que le raccourci pour supprimer les valeurs « vides ».

Fonctionnement de array_filter()

array_filter() parcourt le tableau élément par élément et appelle votre callback sur chacun d'eux :

  • Si le callback retourne une valeur vraie (truthy), l'élément est conservé.
  • S'il retourne une valeur fausse (falsy), l'élément est supprimé.

Le tableau d'origine n'est jamais modifié — array_filter() construit et retourne un nouveau tableau. Par défaut, le callback reçoit la valeur de l'élément (et non sa clé).

Syntaxe

array_filter(array $array, ?callable $callback = null, int $mode = 0): array
  • $array — le tableau à filtrer.
  • $callback — la fonction de test. Facultatif : si omis, tout élément égal à une valeur falsy (false, 0, 0.0, "", "0", null, []) est supprimé.
  • $mode — contrôle ce que le callback reçoit. L'une des valeurs 0 (par défaut, la valeur), ARRAY_FILTER_USE_KEY ou ARRAY_FILTER_USE_BOTH. Voir Filtrage par clé.

Filtrage avec un callback personnalisé

L'utilisation la plus courante consiste à filtrer selon une condition personnalisée. Ici, nous conservons uniquement les nombres pairs :

php— editable, runs on the server

Sortie :

Array ( [1] => 2 [3] => 4 [5] => 6 )

Remarquez les clés : les éléments conservés gardent leurs clés d'origine (1, 3, 5), elles ne sont pas renumérotées. C'est la principale surprise avec array_filter(). Voir Réindexer le résultat ci-dessous pour la solution.

En PHP moderne, vous pouvez écrire le callback sous forme de fonction fléchée concise :

$evenNumbers = array_filter($numbers, fn ($number) => $number % 2 === 0);

Utiliser une fonction intégrée comme callback

Le callback peut être n'importe quel callable, y compris une fonction intégrée passée par son nom. Ici, is_numeric conserve uniquement les valeurs numériques :

php— editable, runs on the server

Sortie :

Array ( [0] => 1 [1] => 2 [3] => 4 [4] => 5 )

La chaîne '2' est conservée car is_numeric('2') vaut true, tandis que 'three' est supprimée.

Supprimer les valeurs vides (sans callback)

Appelez array_filter() avec uniquement le tableau pour supprimer tous les éléments falsy — un moyen rapide de nettoyer une liste de champs optionnels :

<?php

$values = [0, 1, 2, '', '0', 'hello', null, false, []];

print_r(array_filter($values));

?>

Sortie :

Array ( [1] => 1 [2] => 2 [5] => hello )

Attention : cela supprime 0, '0' et '' car ils sont falsy. Si un 0 ou '0' littéral a une signification dans vos données, passez plutôt un callback explicite, par exemple fn ($v) => $v !== null.

Filtrage par clé ou par les deux

Par défaut, le callback ne reçoit que la valeur. Passez l'argument $mode pour modifier ce comportement :

ARRAY_FILTER_USE_KEY passe la clé au callback à la place de la valeur :

<?php

$data = ['a' => 1, 'b' => 2, 'ab' => 3];

// Keep only single-letter keys
$result = array_filter($data, fn ($key) => strlen($key) === 1, ARRAY_FILTER_USE_KEY);

print_r($result);

?>

Sortie :

Array ( [a] => 1 [b] => 2 )

ARRAY_FILTER_USE_BOTH passe à la fois la valeur et la clé (la valeur en premier) :

<?php

$data = ['a' => 1, 'b' => 2, 'c' => 3];

$result = array_filter($data, fn ($value, $key) => $value > 1 && $key !== 'c', ARRAY_FILTER_USE_BOTH);

print_r($result);

?>

Sortie :

Array ( [b] => 2 )

Réindexer le résultat

Comme array_filter() préserve les clés, un tableau indexé peut se retrouver avec des lacunes ([1], [3], [5]). Lorsque vous avez besoin d'une liste propre à base zéro — par exemple avant de l'encoder en JSON sous forme de tableau — encapsulez le résultat dans array_values() :

<?php

$numbers = [1, 2, 3, 4, 5, 6];

$even = array_values(array_filter($numbers, fn ($n) => $n % 2 === 0));

print_r($even);

?>

Sortie :

Array ( [0] => 2 [1] => 4 [2] => 6 )

Quand utiliser array_filter()

  • Utilisez array_filter() lorsque vous souhaitez obtenir un sous-ensemble d'un tableau (supprimer les éléments indésirables).
  • Utilisez array_map() lorsque vous souhaitez transformer chaque élément tout en conservant le même nombre d'éléments.
  • Utilisez array_reduce() lorsque vous souhaitez réduire un tableau à une valeur unique.

filter, map et reduce se combinent très bien — filtrez d'abord, puis transformez les survivants.

Conclusion

array_filter() est la manière idiomatique d'extraire un sous-ensemble d'un tableau en PHP. Retenez ses deux comportements clés : le tableau d'origine reste intact, et les éléments survivants conservent leurs clés d'origine (utilisez array_values() pour réindexer). Avec le callback facultatif et les modes ARRAY_FILTER_USE_KEY / ARRAY_FILTER_USE_BOTH, il gère le filtrage par valeur, par clé, ou les deux. Pour en savoir plus sur la manipulation des tableaux, consultez la présentation des Tableaux PHP.

Pratique

Pratique
Que fait la fonction array_filter() en PHP ?
Que fait la fonction array_filter() en PHP ?
Was this page helpful?