Perl join()
ignore (saute) les valeurs de tableau vides; PHP implode()
ne semble pas.
Supposons que j'ai un tableau:
$array = array('one', '', '', 'four', '', 'six');
implode('-', $array);
donne:
one---four--six
au lieu de (IMHO le préférable):
one-four-six
Y a-t-il d'autres éléments intégrés avec le comportement que je recherche? Ou est-ce que ça va être un jobbie personnalisé?
join
n'ignore pas les éléments non définis. En fait, ils entraînent un avertissement.$a[0]="a"; $a[2]="c"; say join "-",@a;
afficheUse of uninitialized value within @a in join or string
eta--c
. On peut utiliserjoin '-', grep !defined, ...
pour ignorer les valeurs non définies.grep !length,
fera des chaînes vides.Réponses:
Vous pouvez utiliser
array_filter()
:Évidemment, cela ne fonctionnera pas si vous avez
0
(ou toute autre valeur évaluée àfalse
) dans votre tableau et que vous souhaitez le conserver. Mais alors vous pouvez fournir votre propre fonction de rappel.la source
false
, et0
sont également rejetés?empty
, comme vous l'utilisez, traitera également0
etfalse
commefalse
(et le supprimera) btw.array_filter()
par des filtres par défaut hors toutfalse
,null
, chaîne vide ( « ») et0
.false
: tableau vide,0.0
et"0"
.Je suppose que vous ne pouvez pas le considérer comme intégré (car la fonction s'exécute avec une fonction définie par l'utilisateur), mais vous pouvez toujours utiliser array_filter .
Quelque chose comme:
la source
empty
a le même effet que de ne passer aucun rappel. Edit: Vous devez annuler la valeur de retour. Sinon, seuls les éléments vides seront retournés;) (en fait, utiliserempty
comme vous leimplode('-', array_filter($ary, create_function('$a', 'return $a!="";')));
La manière dont vous devez mettre en œuvre votre filtre dépend uniquement de ce que vous voyez comme "vide".
la source
Pour supprimer
null
,false
,empty
chaîne mais conserver0
, etc. utilisation fonct. 'strlen
'affichera:
la source
Sur la base de ce que je peux trouver, je dirais que les chances sont, il n'y a vraiment aucun moyen d'utiliser un PHP intégré pour cela. Mais vous pourriez probablement faire quelque chose du genre:
la source
Essaye ça:
la source
Retour
one-two-three
la source
array_fileter()
semble être la voie acceptée ici, et reste probablement la réponse la plus robuste à ce sujet.Cependant, ce qui suit fonctionnera également si vous pouvez garantir que le caractère "glue" n'existe pas déjà dans les chaînes de chaque élément du tableau (ce qui serait donné dans la plupart des circonstances pratiques - sinon vous ne seriez pas en mesure de distinguer la colle des données réelles dans le tableau):
la source
Essaye ça:
la source
isset()
ou comment le casting du tableau d'entréearray
répond à l'une des préoccupations du message d'origine?