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?

Gipfel
quelle
hast du dir php.net/array_map angesehen ?
Kemo
@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! ;)

Alix Axel
quelle
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;
Ben Everard
quelle
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
SIE
quelle
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.

Pekka
quelle
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

Jan Jaso
quelle
-5

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

$a = array(
    (string) $objA,
    (string) $objB,
);
Martin Bean
quelle
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