Comment imploser foreach
Comment imploser foreach()
avec virgule?
foreach($names as $name) {
//do something
echo '<a href="' . $url . '" title="' . $title . '">' . $name .'</a>';
}
Souhaitez ajouter une virgule après chaque lien, sauf le dernier.
Mmh quel est l'intérêt d'avoir beaucoup de liens avec des noms différents mais la même URL?
Felix, êtes-vous un lecteur d'esprit qui peut voir ce qui est derrière "//faire quelque chose"? 🙂
Felix, êtes-vous un lecteur d'esprit qui peut voir ce qui est derrière "//faire quelque chose"? 🙂
OriginalL'auteur James | 2010-09-02
Vous devez vous connecter pour publier un commentaire.
Raveren la solution est efficace et belle, mais voici une autre solution (qui peut être utile dans des scénarios similaires):
$elements[] = "<a href=\"$url\" title=
...Ceci est plus lent bien et n'est ni plus lisible ni fonctionnelle. (non pas que c'est pire, je suis juste à la défense de la micro-optimisation)
c'est juste une supposition, je ne peux pas trouver la source, mais concat et substr a été calibré pour être plus rapide dans tous les cas.
Vrai, c'est juste une supposition, mais en général, la mise en forme de chaîne est plus élégant aussi, je ne considère donc pas un mauvais changement, même si c'est plus lent. En outre, un tableau de chaînes qui est concaténé est, pour moi, plus lisible que de dépouiller le dernier caractère.
Bingo McBingo, a fait le tour pour moi, de la façon la plus simple d'obtenir ce damné virgule à une boucle foreach
OriginalL'auteur Emil Vikström
Vous avez besoin pour transformer votre tableau au lieu d'itération en utilisant foreach. Vous pouvez faire cela avec
array_map
.PHP 5.3 syntaxe avec fermetures
Compatible syntaxe avant de PHP 5.3
PHP 5.3 syntaxe avec une meilleure fiabilité de
Je voulais proposer la même chose, mais vous devez être prudent avec
$url
et$title
. Ils ne seront pas ensemble (au moins à l'avant de PHP 5.3 exemple).N'est-ce pas bien plus compliqué que nécessaire?
Il n'est pas si compliqué que ça, il y a vient de la array_map syntaxe qui met la fonction première qui n'est pas une sage décision quand on travaille avec des fermetures. Je suggère la définition d'une nouvelle fonction avec l'ordre inverse des arguments pour améliorer readbility.
OriginalL'auteur Vincent Robert
if(!$s)
, ou mieuxif(strlen($s) == 0) $s = ', ';
knittl, vous pouvez enregistrer un appel de fonction en cochant la fonction isset($s[0]) au lieu de strlen \o/
Pas de.
if ($s)
est correct. Nous ne voulons pas commencer par une virgule. Nous voulons ajouter une qu'à partir du deuxième lien.Mais vous avez réussi à me confondre suffisant pour modifier ma réponse, puis revenir.
ah ok, je ne savais pas que vous étiez à l'aide de $pour le séparateur et la chaîne elle-même. désolé pour la confusion
OriginalL'auteur TRiG
EDIT:
comme les commentaires le soulignent, cette façon de faire les choses est un peu des erreurs si vous changer le séparateur (précisément sa longueur) et d'oublier les substr paramètre. Il faut donc utiliser la méthode foreach moins que l'exercice est absolument essentiel.
pourquoi, c'est plus rapide que d'imploser.
... jusqu'à ce que vous modifier le séparateur et oubliez pas de régler l'
substr
.c'est très valable. Pas une raison pour me donner un moins bien :/
Désolé, je n'avais pas spécialement un signe moins; seulement cette approche. Je l'ai vu de trop nombreuses fois: la création d'une requête de cette façon et puis
substr
ing dans la syntaxe errordom. Je suis en train de décourager cette approche lorsqu'il y a une manière plus propre avecimplode
.OriginalL'auteur raveren
OriginalL'auteur knittl
Ici est un vilain solution à l'aide de l'écho:
$numOfElements = count($names) - 1; foreach ...
)...Bon point - modifié
OriginalL'auteur Jake N