Wie wandle ich Array-Elemente in PHP in Strings um?


74

Wenn ich ein Array mit Objekten habe:

$a = array($objA, $objB);

(Jedes Objekt hat eine __toString()Methode)

Wie kann ich alle Array-Elemente in Zeichenfolgen umwandeln, sodass das Array $akeine weiteren Objekte als deren Zeichenfolgendarstellung enthält? Gibt es einen Einzeiler oder muss ich das Array manuell durchlaufen?




@RohitSuthar: Ihre verknüpfte Antwort erstellt ein Array aus einer Zeichenfolge. Bei dieser Frage ging es darum, ein Array von Objekten in ein Array ihrer Zeichenfolgendarstellung zu konvertieren.
Acme

Antworten:


163

Ein Einzeiler:

$a = array_map('strval', $a);
// strval is a callback function

Siehe PHP DOCS:

array_map

strval

Genießen! ;)


2
Verdammt, ich wünschte, ich wüsste das, bevor ich meine Antwort poste. +1
Ben Everard

2
implode (',', array_map ('strval', $ a)); würde den Job prolly machen
Kemo

2
@Kemo: Ich glaube nicht, dass er das machen will.
Alix Axel

Perfekt, das wollte ich! Vielen Dank!
Acme

1
Wie mache ich das für ein Multi-Dimenstion-Array?
Yatin Mistry

2

Nicht getestet, aber so etwas sollte es tun?

foreach($a as $key => $value) {
    $new_arr[$key]=$value->__toString();
}
$a=$new_arr;

Lesen Sie die Frage, es heißt "Gibt es einen Einzeiler oder muss ich manuell schleifen ..." :)
Kemo

1
Ja, und wie ich in dem Kommentar zu Alix 'Beitrag vorgeschlagen habe, hätte ich seine Lösung angeboten, wenn ich davon gewusst hätte.
Ben Everard

1

Suchen Sie implodieren ?

$array = array('lastname', 'email', 'phone');

$comma_separated = implode(",", $array);

echo $comma_separated; // lastname,email,phone

Nein, weil mein Array aus Objekten besteht, nicht aus Zeichenfolgen. Das Ergebnis sollte ein Array und keine implodierte Zeichenfolge sein.
Acme

0

Ich kann es momentan nicht testen, aber können Sie überprüfen, was passiert, wenn Sie ein implode()solches Array verwenden? Der _toString sollte aufgerufen werden.


Es tut. Einfach reicht implode($array).
Gordon

1
@ Gordon: Es werden jedoch alle Zeichenfolgen in einer zusammengeführt. Ich denke, das OP möchte die __toString()generierten Zeichenfolgen in den entsprechenden Array-Elementen behalten .
Alix Axel

Richtig, ich möchte, dass das Array noch intakt ist und nur die darin enthaltenen Elemente in Zeichenfolgen umgewandelt werden.
Acme

@ Alix Oh, ich verstehe. Ja. Dann reicht implodieren nicht aus.
Gordon

1
@nikc: Nicht wenn das generierte __toString()enthält ,.
Alix Axel

0

Alix Axel hat die schönste Antwort. Sie können mit array_map auch alles auf das Array anwenden, wie ...

//All your objects to string.
$a = array_map(function($o){return (string)$o;}, $a);
//All your objects to string with exclamation marks!!!
$a = array_map(function($o){return (string)$o."!!!";}, $a);

Genießen


-5

Gibt es einen Grund, warum Sie Folgendes nicht tun können?

$a = array(
    (string) $objA,
    (string) $objB,
);

Ja, weil ich eigentlich nicht weiß, wie viele Elemente sich im Array befinden. Das obige Beispiel wurde nur auf zwei Elemente reduziert, um es klarer zu machen.
Acme
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.