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.