Sans foreach , comment puis-je transformer un tableau comme celui-ci
array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");
à une chaîne comme celle-ci
item1='object1', item2='object2',.... item-n='object-n'
J'y ai implode()
déjà pensé , mais cela n'implose pas la clé avec.
Si foreach c'est nécessaire, est-il possible de ne pas nicher le foreach?
EDIT: j'ai changé la chaîne
EDIT2 / UPDATE: Cette question a été posée il y a assez longtemps. À ce moment-là, je voulais tout écrire sur une seule ligne afin d'utiliser des opérateurs ternaires et d'imbriquer des appels de fonction intégrés en faveur de foreach. Ce n'était pas une bonne pratique! Écrire un code lisible, qu'il soit concis ou non, n'a pas beaucoup d'importance.
Dans ce cas: mettre le foreach dans une fonction sera beaucoup plus lisible et modulaire que d'écrire un one-liner (même si toutes les réponses sont excellentes!).
Réponses:
et d'une autre manière:
ou:
la source
echo "Hello, World!";
Dois-je voir des exemples de code de ces fonctions?array_fill(0, $input, 'selected-value-you want-to-check-against');
Cela générera un tableau de même taille avec une valeur unique pour toutes les lignes.Vous pouvez utiliser http_build_query , comme ceci:
Production:
Démo
la source
http_build_query
.http_build_query
dansurldecode
de l' éviter.J'ai passé des mesures (100000 itérations), quel moyen le plus rapide pour coller un tableau associatif?
Objectif: obtenir une ligne de 1 000 éléments, au format suivant: "clé: valeur, clé2: valeur2"
Nous avons un tableau (par exemple):
Test numéro un:
Utilisez http_build_query et str_replace :
Temps moyen pour imploser 1000 éléments: 0,00012930955084904
Test numéro deux:
Utilisez array_map et imploser :
Temps moyen pour imploser 1000 éléments: 0,0004890081976675
Test numéro trois:
Utilisez array_walk et imploser :
Temps moyen pour imploser 1000 éléments: 0,0003874126245348
Test numéro quatre:
Utilisez foreach :
Temps moyen pour imploser 1000 éléments: 0,00026632803902445
Je peux conclure que la meilleure façon de coller le tableau - utilisez http_build_query et str_replace
la source
$s = ''; foreach ($array as $k=>$v) { if ($s !== null) { $s .= ','; } $s .= "{$k}:{$v}"; }
surpasse tous les autres.substr(str_replace('"', '', json_encode($headers)), 1, -1);
http_build_query
remplace les espaces par le caractère plus (+
).J'utiliserais
serialize()
oujson_encode()
.Bien que cela ne donne pas la chaîne de résultat exacte que vous souhaitez, il serait beaucoup plus facile d'encoder / stocker / récupérer / décoder plus tard.
la source
Utilisation de array_walk
IDÉONE
la source
create_function
au lieu d'utiliser simplement une fonction anonyme?Changement
si vous souhaitez réécrire la chaîne entière sans le dernier $ glue
Et l'utilisation:
la source
À des fins de débogage. Récursif écrit un tableau de tableaux imbriqués dans une chaîne. Utilisé pourchaque. La fonction stocke les caractères de la langue nationale.
la source
Vous pouvez également utiliser array_reduce de PHP ,
la source
Pour créer mysql où les conditions du tableau
la source
Il existe également var_export et print_r plus connus pour imprimer la sortie de débogage, mais les deux fonctions peuvent prendre un argument facultatif pour renvoyer une chaîne à la place.
En utilisant l'exemple de la question comme données.
Utilisation
print_r
pour transformer le tableau en une chaîneCela produira une représentation lisible par l'homme de la variable.
Sortira:
Utilisation
var_export
pour transformer le tableau en une chaîneCe qui produira une représentation sous forme de chaîne php de la variable.
Sortira:
Parce que c'est du php valide, nous pouvons l'évaluer.
Les sorties:
la source
Voici un exemple simple, utilisant la classe:
la source