Position actuelle: Accueil> Derniers articles> Ignorer les chaînes vides, 0 et null sont toutes traitées comme des "fausses valeurs"

Ignorer les chaînes vides, 0 et null sont toutes traitées comme des "fausses valeurs"

M66 2025-06-05

Dans PHP, Array_Filter est une fonction très pratique pour filtrer les tableaux en fonction du résultat de retour de la fonction de rappel. Par défaut, si la fonction de rappel n'est pas fournie, Array_Filter supprime tous les éléments considérés comme "Valeurs Falsy". Ces "fausses valeurs" incluent:

  • FAUX

  • nul

  • 0 (entier)

  • '0' (chaîne)

  • '' (chaîne vide)

  • [] (Tableau vide)

Cela peut confondre certains développeurs, surtout lorsqu'ils voulaient à l'origine retirer des cordes nulles ou vides, ils ont constaté que même l'entier 0 était supprimé ensemble. Alors, pourquoi cela se produit-il? Jetons un look plus profond.

Le concept de "fausse valeur" en php

PHP est un langage de type faible, ce qui signifie que lorsqu'il effectue une opération booléenne, il convertit automatiquement certains types en valeurs booléennes. Ce mécanisme est appelé jonglage de type. Dans un contexte booléen, les valeurs suivantes sont interprétées comme fausses :

 var_dump((bool) false);   // false
var_dump((bool) null);    // false
var_dump((bool) 0);       // false
var_dump((bool) '0');     // false
var_dump((bool) '');      // false
var_dump((bool) []);      // false

Tant qu'une valeur est convertie en type booléen et fausse , Array_Filter le filtrera par défaut.

Le comportement par défaut de Array_Filter

Le prototype de fonction Array_Filter est le suivant:

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array

Lorsque le deuxième paramètre $ rappelle est nul , Array_Filter fonctionne réellement comme suit:

 $result = [];
foreach ($array as $key => $value) {
    if ((bool) $value) {
        $result[$key] = $value;
    }
}

Par exemple:

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

$result = array_filter($data);

// s'avérer [1 => 1, 2 => 2, 5 => 'hello']

Comme vous pouvez le voir, 0 , null , '' et false sont tous considérés comme «faux» et sont donc supprimés.

Comment filtrer les valeurs d'un type spécifique?

Si vous souhaitez simplement filtrer les valeurs nulles et conserver 0 et des chaînes vides, vous pouvez passer dans une fonction de rappel personnalisée, par exemple:

 $data = [0, '0', '', null, false, 'PHP'];

$result = array_filter($data, function ($item) {
    return !is_null($item);
});

// Garder 0、'0' et ''

Par exemple, si vous souhaitez simplement supprimer les chaînes vides:

 $result = array_filter($data, function ($item) {
    return $item !== '';
});

Cela vous permet de contrôler soigneusement les valeurs doivent être conservées en fonction des besoins spécifiques.

Un exemple de scénario pratique

Supposons que vous construisez un système de soumission de formulaire, et que le formulaire frontal peut transmettre des champs vides, et que vous voulez garder uniquement ce que l'utilisateur remplit réellement:

 $formData = [
    'name' => 'Alice',
    'email' => '',
    'age' => 0,
    'website' => null,
];

$filtered = array_filter($formData, function ($value) {
    return $value !== '' && !is_null($value);
});

print_r($filtered);

Résultat de sortie:

 Array
(
    [name] => Alice
    [age] => 0
)

Dans ce résultat, la chaîne vide et null sont supprimées, tandis que 0 est conservé car l'utilisateur peut avoir réellement rempli l'âge de 0.

résumé

Lorsque vous utilisez Array_Filter , il est crucial de comprendre le concept de "fausses valeurs" dans PHP. Par défaut, il supprime toutes les valeurs équivalentes à booléen false , pas seulement des chaînes nulles ou vides. Si vous avez besoin d'un comportement de filtrage plus précis, il est recommandé de toujours passer une fonction de rappel personnalisée.

De cette façon, vous pouvez éviter de supprimer accidentellement des données valides, telles que la valeur "0" que l'utilisateur remplit, et vous pouvez également traiter de manière flexible avec divers scénarios commerciaux.