Wie kann ich ohne foreach ein Array wie dieses drehen?
array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");
zu einem String wie diesem
item1='object1', item2='object2',.... item-n='object-n'
Ich habe implode()
bereits darüber nachgedacht , aber es implodiert den Schlüssel nicht damit.
Ist es möglich, den foreach nicht zu verschachteln, wenn dies erforderlich ist?
EDIT: Ich habe die Zeichenfolge geändert
EDIT2 / UPDATE: Diese Frage wurde vor einiger Zeit gestellt. Zu dieser Zeit wollte ich alles in eine Zeile schreiben, um ternäre Operatoren und eingebettete Funktionsaufrufe zugunsten von foreach zu verwenden. Das war keine gute Praxis! Schreiben Sie lesbaren Code, egal ob er präzise ist oder nicht.
In diesem Fall: Das Einfügen des foreach in eine Funktion ist viel lesbarer und modularer als das Schreiben eines Einzeilers (obwohl alle Antworten großartig sind!).
Antworten:
und ein anderer Weg:
oder:
quelle
echo "Hello, World!";
Sollte ich Codebeispiele für diese Funktionen sehen?array_fill(0, $input, 'selected-value-you want-to-check-against');
Dadurch wird ein Array gleicher Größe mit einem einzigen Wert für alle Zeilen generiert.Sie könnten http_build_query wie folgt verwenden :
Ausgabe:
Demo
quelle
http_build_query
.http_build_query
inurldecode
sie zu vermeiden.Ich habe Messungen (100000 Iterationen) durchgeführt. Wie kann ich ein assoziatives Array am schnellsten zusammenkleben?
Ziel: Um eine Zeile mit 1.000 Elementen in diesem Format zu erhalten: "Schlüssel: Wert, Schlüssel2: Wert2"
Wir haben Array (zum Beispiel):
Test Nummer eins:
Verwenden Sie http_build_query und str_replace :
Durchschnittliche Zeit zum Implodieren von 1000 Elementen: 0,00012930955084904
Test Nummer zwei:
Verwenden Sie array_map und implodieren Sie :
Durchschnittliche Zeit zum Implodieren von 1000 Elementen: 0,0004890081976675
Test Nummer drei:
Verwenden Sie array_walk und implodieren Sie :
Durchschnittliche Zeit zum Implodieren von 1000 Elementen: 0,0003874126245348
Test Nummer vier:
Verwenden Sie foreach :
Durchschnittliche Zeit zum Implodieren von 1000 Elementen: 0,00026632803902445
Ich kann daraus schließen, dass der beste Weg, um das Array zu kleben - verwenden Sie http_build_query und str_replace
quelle
$s = ''; foreach ($array as $k=>$v) { if ($s !== null) { $s .= ','; } $s .= "{$k}:{$v}"; }
übertrifft alle anderen.substr(str_replace('"', '', json_encode($headers)), 1, -1);
http_build_query
ersetzt Leerzeichen durch Pluszeichen (+
).Ich würde
serialize()
oder verwendenjson_encode()
.Es gibt zwar nicht genau die gewünschte Ergebniszeichenfolge, aber es wäre viel einfacher, sie später zu codieren / speichern / abrufen / dekodieren.
quelle
Mit array_walk
IDEONE
quelle
create_function
anstatt nur eine anonyme Funktion zu verwenden?Veränderung
Wenn Sie den gesamten String ohne den letzten $ Kleber erneut speichern möchten
Und die Verwendung:
quelle
Zum Debuggen. Rekursiv Schreiben Sie ein Array verschachtelter Arrays in eine Zeichenfolge. Für jeden verwendet. Die Funktion speichert Zeichen in der Landessprache.
quelle
Sie können auch Array_reduce von PHP verwenden .
quelle
Zum Erstellen von MySQL, wo Bedingungen aus Array
quelle
Es gibt auch var_export und print_r , die allgemeiner zum Drucken von Debug-Ausgaben bekannt sind, aber beide Funktionen können ein optionales Argument verwenden, um stattdessen eine Zeichenfolge zurückzugeben.
Verwenden Sie das Beispiel aus der Frage als Daten.
Verwenden Sie
print_r
, um das Array in eine Zeichenfolge umzuwandelnDies gibt eine lesbare Darstellung der Variablen aus.
Wird ausgegeben:
Verwenden Sie
var_export
, um das Array in eine Zeichenfolge umzuwandelnWomit eine PHP-String-Darstellung der Variablen ausgegeben wird.
Wird ausgegeben:
Da es gültiges PHP ist, können wir es bewerten.
Ausgänge:
quelle
Hier ist ein einfaches Beispiel mit class:
quelle