disons que j'ai ceci:
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}
10 Réponses :
Une méthode consiste à utiliser Une autre méthode utiliserait substr code> imploral code> p> $array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
$output = array();
foreach($array as $i=>$k)
{
$output[] = $i.'-'.$k;
}
echo implode(',', $output);
Vous pouvez également utiliser le rtrim code> fonction AS:
$result = '';
foreach($array as $i=>$k) {
$result .= $i.'-'.$k.',';
}
$result = rtrim($result,',');
echo $result;
Oui, j'ai oublié de la coupe. +1
Dommage PHP ne prend pas en charge nonset ($ Résultat [SHLEN ($ Résultat) -1]) code>. Ce serait si gentil ...
@NullUSeException: hum, mais vous pouvez faire string [0] = 'A' code>. Donc, vous peut i> les changer. Seuls les compensations de string non sélectionnant ne sont pas possibles. Cela n'a pas de sens pour moi, car les chaînes prennent en charge toutes les opérations de tableau ( offsetTiet code>, offsetset code>, offsetexistes code>) à part non défini < / code> ( offseCetSet code>).
@niki je n'appellerais pas non sorti d'une opération de compensation arbitraire. Si c'est le dernier, oui; Mais par le principe du moins d'étonnement, vous ne voudrez pas que cela favorise désapprouver le dernier élément mais pas les autres.
@Daniel K: Que l'appelleriez-vous à la place? C'est l'une des opérations que l'interface arrayAccess code> définit. Et ces IMHO sont les opérations de réseau;)
@niki Le problème est que les matrices de PHP sont des hashmaps, mais la mise en œuvre sous-jacente des chaînes PHP est (AFAIK) un tableau de caractères (par exemple: un "réel" tableau)
@NULLUSEXEXCEPTION: Oui, vous avez raison, la mise en œuvre sous-jacente est différente. Je m'attendrais toujours à ce que toutes les opérations sur un tableau soient également disponibles pour les chaînes, car les chaînes ne sont qu'une forme spéciale de tableaux;)
@niki Eh bien, je viens de faire substr ($ str, 0, -1) code> si j'ai besoin de supprimer le dernier caractère.
@NullUSeException: Eh bien, je fais cela aussi, car il n'y a pas une autre possibilité. Mais j'aimerais désapprendre plus, car dans cette affaire, PHP n'aurait pas besoin de copier la chaîne entière à une nouvelle partie de la mémoire;)
@niki mais c'est exactement le point; Si vous non définissez un élément arbitraire d'un véritable matrice, vous i> devrez copier la chaîne entière à un nouveau morceau de mémoire (sauf si c'est le dernier élément)
@NULLUSEXEXCEPTION: Le "sauf" n'est pas rare;) En outre, en fonction de la mise en œuvre, vous n'avez pas besoin de copier la chaîne entière. Par exemple, vous pouvez décrémenter la propriété de longueur de la chaîne et déplacer tous les caractères à partir d'un index particulier. C'est toujours plus rapide puis la copie tout.
Essayez ce code après la condition foreach, puis echo $ résultat1
Je n'aime pas cette idée d'utiliser des substrateurs du tout, car c'est le style de mauvaise programmation. L'idée est de concaténer tous les éléments et de les séparer par des phrases spéciales "séparatrices". L'idée d'appeler la sous-chaîne pour cela est de savoir utiliser un laser pour tirer les oiseaux.
Dans le projet, je suis en train de traiter, nous essayons de nous débarrasser des mauvaises habitudes dans le codage. Et cet échantillon est considéré comme l'un d'entre eux. Nous forcions les programmeurs à écrire ce code comme celui-ci: p> Le but de ce code est beaucoup plus clair que celui qui utilise le substruisement. Ou vous pouvez simplement utiliser
Comment est-ce un signe de mauvais style de programmation? Cela vous dérangeriez-vous d'élaborer à ce sujet pour nous tous? Autant que je puisse le constater, cela n'hésite pas à la performance. Je peux comprendre la partie de clarté, mais en même temps, il n'est pas difficile de lire sur quel substrateur pour le comprendre. Merci!
IMHO, chaque outil doit être utilisé de manière appropriée dans les programmes et ce n'est pas un objectif substrable de servir de concaténation à la chaîne, il a été conçu pour d'autres problèmes. En outre, ce code avec substraire ne semble clair que ce que c'est au même endroit. S'il y a de nombreux fragments comme celui-ci, le code se transforme en illisible. Par conséquent, dans notre projet, nous avons changé en concaténation normale et avons également fait une fonction spéciale pour cela. Maintenant, la partie du projet qui traite des chaînes est beaucoup plus lisible.
Merci beaucoup pour cette excellente solution professionnelle. (y)
J'utilise toujours cette méthode:
$result = '';
foreach($array as $i=>$k) {
if(strlen($result) > 0) {
$result .= ","
}
$result .= $i.'-'.$k;
}
echo $result;
Mauvaise idée d'utiliser SHLEN pour cela. Voir l'article de Joel Spolsky «Retour à la base» afin de voir pourquoi. Utilisez simplement un drapeau booléen pour effectuer une telle vérification, car dans le pire des cas (tableau a n éléments - caractères simples), vous finirez par une complexité O (N ^ 2).
En général, n'utilisez pas de fonctions de chaîne afin d'obtenir un effet, qui peut être facilement réalisée par de simples astuces de programmation (la même chose est vraie pour utiliser Substr afin de se débarrasser de la dernière virgule - il vaut mieux ne pas générer la dernière comman du tout).
Je n'aime pas toutes les recettes précédentes.
PHP n'est pas C et a des moyens de manière plus élevé de traiter ce problème particulier. P>
Je vais commencer par le point où vous avez un tableau comme celui-ci: P>
echo implode(',', $array);
Cette approche bénéfice que nous pouvons changer le délimiteur plus facile. De plus, vous pouvez exploser la chaîne à la matrice plus tard similaire à celle-ci. Pas sûr de l'inconvénient de la performance
J'aime ça mieux ça aussi. Ne boucle pas si vous n'êtes pas obligé.
Apparemment, vous n'avez même pas lu toutes les recettes précédentes i>, car cela était déjà suggéré par Premiso.
Il a été suggéré par moi, mais je n'ai pas utilisé la fonction array_map code>, mais merci Captaintokyo. @Powertieke, il fait boucle, comme array_map () code> devrait faire boucler les données. J'ai pris que le tableau de l'OP posté n'était qu'une démonstration de ses données qu'il a ailleurs.
Cela ferait:
rtrim ($string, ',')
En supposant que le tableau est un index, cela fonctionne pour moi. Je boucle i $ i et testez $ i contre la clé $. Lorsque la clé se termine, les virgules ne sont pas imprimés. Notez que le SI a deux valeurs pour vous assurer que la première valeur n'a pas de virgule au tout début.
foreach($array as $key => $value)
{
$w = $key;
//echo "<br>w: ".$w."<br>";// test text
//echo "x: ".$x."<br>";// test text
if($w == $x && $w != 0 )
{
echo ", ";
}
echo $value;
$x++;
}
Voir cet exemple, vous pouvez facilement comprendre
Devrait être soit $ clé + 1 ou compter (nom $) - 1.
J'ai supprimé la virgule de la dernière valeur du tableau en utilisant la dernière clé de la matrice. J'espère que cela vous donnera une idée.
$last_key = end(array_keys($myArray));
foreach ($myArray as $key => $value ) {
$product_cateogry_details="SELECT * FROM `product_cateogry` WHERE `admin_id`='$admin_id' AND `id` = '$value'";
$product_cateogry_details_query=mysqli_query($con,$product_cateogry_details);
$detail=mysqli_fetch_array($product_cateogry_details_query);
if ($last_key == $key) {
echo $detail['product_cateogry'];
}else{
echo $detail['product_cateogry']." , ";
}
}