Certains éléments de mon tableau sont des chaînes vides basées sur ce que l'utilisateur a soumis. Je dois supprimer ces éléments. J'ai ceci:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
Mais ça ne marche pas. $linksArray
a encore des éléments vides. J'ai également essayé de le faire avec la empty()
fonction, mais le résultat est le même.
Réponses:
Comme vous avez affaire à un tableau de chaînes, vous pouvez simplement utiliser
array_filter()
ce qui gère tout cela à votre place:Gardez à l'esprit que si aucun rappel n'est fourni , toutes les entrées de tableau égales à
FALSE
(voir conversion en booléen ) seront supprimées. Donc, si vous devez conserver des éléments qui sont par exemple une chaîne exacte'0'
, vous aurez besoin d'un rappel personnalisé:la source
array_filter
devrait supprimer les éléments vides. Et si la définition de PHP de vide n'est pas tout à fait la même que votre définition, vous pouvez remplir l'option de rappel avec une fonction anonyme qui rejette les éléments indésirables. Apparemment, vous devez avoir php 5.3 ou version ultérieure pour utiliser les rappels anonymes. stackoverflow.com/questions/2412299/…false
également les éléments. ( php.net/manual/en/function.array-filter.php )a
la deuxième fois réinitialise simplement la première.Vous pouvez utiliser
array_filter
pour supprimer des éléments vides:Si vous en avez
(int) 0
dans votre tableau, vous pouvez utiliser ce qui suit:EDIT: Peut-être que vos éléments ne sont pas vides en soi mais contiennent un ou plusieurs espaces ... Vous pouvez utiliser ce qui suit avant d'utiliser
array_filter
la source
scalar
éléments dans votre tableau, oui. Sinon, vous ne pouvez pas faire ça.function remove_empty($array) { return array_filter($array, function($value){return !empty($value) || $value === 0;}); }
array_map()
a fait le cos magique que j'avais des espaces dans ces tableaux vides!La réponse la plus populaire sur ce sujet est absolument INCORRECTE.
Considérez le script PHP suivant:
Pourquoi est-ce? Parce qu'une chaîne contenant un seul caractère «0» est également évaluée comme booléenne false, donc même si ce n'est pas une chaîne vide, elle sera toujours filtrée. Ce serait un bug.
Le passage de la fonction strlen intégrée en tant que fonction de filtrage fonctionnera, car il renvoie un entier non nul pour une chaîne non vide et un entier zéro pour une chaîne vide. Les entiers non nuls sont toujours évalués comme vrais lorsqu'ils sont convertis en booléens, tandis que les entiers nuls sont toujours évalués comme faux lorsqu'ils sont convertis en booléens.
Donc, la réponse absolue, définitive et correcte est:
la source
0
,""
,null
)strlen() expects parameter 1 to be string, array given
"Si aucun rappel n'est fourni, toutes les entrées d'entrée égales à FALSE seront supprimées." - http://php.net/manual/en/function.array-filter.php
la source
la source
Tu peux juste faire
array_filter: "Si aucun rappel n'est fourni, toutes les entrées d'entrée égales à FALSE seront supprimées." Cela signifie que les éléments avec les valeurs NULL, 0, '0', '', FALSE, array () seront également supprimés.
L'autre option fait
qui supprimera les éléments avec les valeurs NULL, '' et FALSE.
J'espère que cela t'aides :)
MISE À JOUR
Voici un exemple.
Pour résumer:
la source
la source
false
et0
. Étant donné que cela a été publié la même minute que la réponse acceptée (ce qui est dangereux et incorrect), je ne peux que supposer que vos 8 votes positifs par rapport au 649 de la réponse acceptée sont dus à ce que cette dernière soit une solution à une ligne.array_filter()
serait une approche plus propre qu'uneforeach()
boucletrim()
, je recommanderaisif(is_string($link) && trim($link) === '')
Un autre liner pour supprimer les éléments vides ("" chaîne vide) de votre tableau.
Remarque: Ce code maintient délibérément
null
,0
et desfalse
éléments.Ou peut-être souhaitez-vous d'abord couper vos éléments de tableau:
Remarque: Ce code supprime également les éléments
null
etfalse
.la source
En bref:
Voici mon code suggéré:
Explication:
Je pense que l'utilisation
array_filter
est bonne, mais pas suffisante, car les valeurs sont commespace
et\n
, ... gardez dans le tableau et c'est généralement mauvais.Donc , je vous suggère d' utiliser le mélange
array_filter
etarray_map
.array_map
sert à rogner,array_filter
à supprimer les valeurs vides,strlen
à conserver la0
valeur etarray_values
à réindexer si vous en avez besoin.Échantillons:
Résultats:
Test en ligne:
http://phpio.net/s/5yg0
la source
Si vous travaillez avec un tableau numérique et devez réindexer le tableau après avoir supprimé les éléments vides, utilisez la fonction array_values :
Voir aussi: tableau de réindexation PHP?
la source
La réponse la plus votée est fausse ou du moins pas complètement vraie car l'OP ne parle que de chaînes vides. Voici une explication approfondie:
Que signifie vide ?
Tout d'abord, nous devons convenir de ce que signifie vide . Voulez-vous filtrer:
$element === false
)empty()
fonction de PHP ?Comment filtrez-vous les valeurs
Pour filtrer uniquement les chaînes vides :
Pour filtrer uniquement les valeurs strictement fausses , vous devez utiliser une fonction de rappel :
Le rappel est également utile pour toute combinaison dans laquelle vous souhaitez filtrer les valeurs "falsey", à l'exception de certaines. (Par exemple, filtrez chaque
null
etfalse
, etc., en laissant uniquement0
):Les troisième et quatrième cas sont (pour nos fins enfin) équivalents, et pour cela tout ce que vous avez à utiliser est la valeur par défaut:
la source
null
etfalse
laisser 0, vous pouvez également utiliser la fonction intégrée de phpstrlen
comme rappel.Je devais le faire afin de garder une valeur de tableau de (chaîne) 0
la source
la source
Pour tableau multidimensionnel
la source
la source
la source
J'utilise le script suivant pour supprimer des éléments vides d'un tableau
la source
Je veux juste contribuer à une alternative aux boucles ... combler également les lacunes dans les clés ...
Dans mon cas, je voulais conserver les clés de tableau séquentielles une fois l'opération terminée (pas seulement les nombres impairs, c'est ce que je regardais. La configuration du code pour rechercher uniquement les clés impaires m'a semblé fragile et pas pour l'avenir.)
Je cherchais quelque chose de plus comme ceci: http://gotofritz.net/blog/howto/removing-empty-array-elements-php/
La combinaison de array_filter et array_slice fait l'affaire.
$example = array_filter($example); $example = array_slice($example,0);
Aucune idée sur l'efficacité ou les repères mais ça marche.
la source
production
la source
la source
Une seule ligne: mise à jour (grâce à @suther):
la source
utilisez la
array_filter
fonction pour supprimer les valeurs vides:la source
Supprimer les éléments de tableau vides
Ça marche!
la source
Selon votre méthode, vous pouvez simplement attraper ces éléments dans un autre tableau et utiliser celui-ci comme suit,
la source
essayez ceci ** ** Exemple
la source
Je pense que array_walk est beaucoup plus approprié ici
Production:
Nous avons également coupé les espaces vides des valeurs valides
Enfin, seuls (null), (Boolean False) et ('') seront considérés comme des chaînes vides
Pour
False
ce qui est de la supprimer, car AFAIK, l'utilisateur ne peut pas soumettre de valeurs booléennes.la source
Avec ce genre de choses, il vaut mieux être explicite sur ce que vous voulez et ce que vous ne voulez pas.
Cela aidera le prochain gars à ne pas se laisser surprendre par le comportement de
array_filter()
sans rappel. Par exemple, je me suis retrouvé sur cette question car j'ai oublié siarray_filter()
supprimeNULL
ou non. J'ai perdu du temps alors que j'aurais pu utiliser la solution ci-dessous et avoir ma réponse.De plus, la logique est un langage angnostique dans le sens où le code peut être copié dans un autre langage sans avoir à comprendre le comportement d'une fonction php comme
array_filter
quand aucun rappel n'est passé.Dans ma solution, il est clair au regard de ce qui se passe. Supprimez une condition pour conserver quelque chose ou ajoutez une nouvelle condition pour filtrer des valeurs supplémentaires.
Ne tenez pas compte de l'utilisation réelle de
array_filter()
car je ne fais que lui faire un rappel personnalisé - vous pouvez continuer et l'extraire dans sa propre fonction si vous le souhaitez. Je l'utilise juste comme sucre pour uneforeach
boucle.Un autre avantage de cette approche est que vous pouvez séparer les prédicats de filtrage en une fonction abstraite qui filtre une seule valeur par tableau et créer une solution composable.
Voir cet exemple et les commentaires en ligne pour la sortie.
Vous pouvez maintenant créer dynamiquement une fonction appelée
filterer()
usingpipe()
qui appliquera ces fonctions partiellement appliquées pour vous.la source