Wie konvertiert man ein Array in ein Objekt in PHP?
Lesezeit: 5 Minuten
Straßenparade
Wie kann ich ein solches Array in ein Objekt umwandeln?
[128] => Array
(
[status] => "Figure A.
Facebook's horizontal scrollbars showing up on a 1024x768 screen resolution."
)
[129] => Array
(
[status] => "The other day at work, I had some spare time"
)
Welche Art von Objekt möchten Sie genau erhalten? Was ich meine ist: was sollten die Attribute sein?
– Pascal Martin
8. Dezember 2009 um 18:58 Uhr
In einer Schleife sollte es beides sein, da der Status ein Datenarray ist, sodass beide gedruckt werden
– Straßenparade
8. Dezember 2009 um 19:08 Uhr
nicht sicher ab wann, aber das funktioniert einfach: $a = (object)['hello' => 'world'];
– Benutzer1267177
5. November 2016 um 11:44 Uhr
Sie können einfach die Typumwandlung verwenden, um ein Array in ein Objekt umzuwandeln.
// *convert array to object* Array([id]=> 321313[username]=>shahbaz)
$object = (object) $array_name;
//now it is converted to object and you can access it.
echo $object->username;
funktioniert nicht, das habe ich getan, bevor ich die Frage hier gestellt habe, also muss es einen anderen Weg geben, dies zu tun
– Straßenparade
8. Dezember 2009 um 19:00 Uhr
Warum muss er seinen Grund angeben, warum er Objekte verwenden möchte? Ich glaube nicht, dass das relevant ist wie es ist fertig. Vielleicht muss er sie json_encoden oder serialisieren? Es kann Dutzende von Gründen geben, dies zu tun.
– Zombie
8. Dezember 2009 um 19:06 Uhr
hmm .. ich habe mir die Browserausgabe angesehen, es sieht so aus Objekt (stdClass) # 150 (130) { [0]=> Array(1) { [“status”]=> string(130) “Endlich müssen sich Mac- und Linux-Benutzer nicht wie Bürger zweiter Klasse im Chrome-Land fühlen: Sie haben eine offizielle Beta-Version …” } offiziell ist das ein Objekt, aber wie man das iteriert Ich kann auf den Status wie $obj->status zugreifen. Irgendeine Idee?
– Straßenparade
8. Dezember 2009 um 19:06 Uhr
zombat, JSON-Codierung ist kein Grund für die Verwendung eines Objekts, es gibt ein Flag für json_encode(), um Objekte zu verwenden. Beim Serialisieren bräuchte man einen bestimmten Objekttyp, der vom Empfänger erwartet wird. Und im Allgemeinen versuche ich, mit dem zu helfen tatsächlich Problem. für mich impliziert diese frage, dass an anderer stelle ein architektonischer fehler vorliegt.
– Johannes
8. Dezember 2009 um 19:15 Uhr
Schnell hacken:
// assuming $var is a multidimensional array
$obj = json_decode (json_encode ($var), FALSE);
Nicht schön, aber funktioniert.
Ich liebe diese Lösung wirklich, die Verwendung integrierter Funktionen anstelle von benutzerdefinierten ist immer schneller, und diese funktioniert großartig. Danke für den Tipp.
– aknatn
26. Mai 2012 um 20:17 Uhr
@Oddant, um @EdsonMedina gegenüber fair zu sein, gibt die ursprüngliche Frage nicht an, welche Sichtbarkeit die Attribute benötigen, und da OP sie nicht verwendet $this In den Kommentaren, die als Zugriffsberechtigter folgen, wird stark impliziert, dass er/sie a wünscht stdClass -Instanz als Ausgabe und keine benutzerdefinierte Klasse, wie sie Ihre Antwort verwendet. Ich stimme der Eleganz dieser Lösung zu, aber leider ist es ein ziemlich häufig verwendetes Muster, um dieses Problem mit verschachtelten Arrays zu lösen, bei denen das Casting in ein Objekt nicht funktioniert. Es ist auch möglich, dass OP eine Schnittstelle verwendet, die ein Objekt als Eingabe und kein Array erfordert.
– DiakonDesperado
19. Juni 2013 um 19:49 Uhr
Vergessen Sie nicht, dass Sie auf diese Weise alle außer den Grundtypen verlieren. DateTime wird zum Beispiel Konverter stdObject sein.
– Denis Pschenow
4. November 2014 um 17:33 Uhr
Ich habe gerade bemerkt, dass dies für einfache Arrays wie dieses nicht funktioniert: json_decode(json_encode([‘test’]),falsch); Dies ergibt das gleiche Array, das für die Eingabe verwendet wurde
– John Doe
28. Juni 2018 um 14:12 Uhr
@JohnDoe Die Frage bezieht sich auf assoziative Arrays, nicht auf einfache Arrays.
– Edson Medina
29. Juni 2018 um 16:15 Uhr
ChrisForence
Hier sind drei Möglichkeiten:
Fälschen Sie ein echtes Objekt:
class convert
{
public $varible;
public function __construct($array)
{
$this = $array;
}
public static function toObject($array)
{
$array = new convert($array);
return $array;
}
}
Konvertieren Sie das Array in ein Objekt, indem Sie es in ein Objekt umwandeln:
Ich liebe diese Lösung wirklich, die Verwendung integrierter Funktionen anstelle von benutzerdefinierten ist immer schneller, und diese funktioniert großartig. Danke für den Tipp.
– aknatn
26. Mai 2012 um 20:17 Uhr
@Oddant, um @EdsonMedina gegenüber fair zu sein, gibt die ursprüngliche Frage nicht an, welche Sichtbarkeit die Attribute benötigen, und da OP sie nicht verwendet $this In den Kommentaren, die als Zugriffsberechtigter folgen, wird stark impliziert, dass er/sie a wünscht stdClass -Instanz als Ausgabe und keine benutzerdefinierte Klasse, wie sie Ihre Antwort verwendet. Ich stimme der Eleganz dieser Lösung zu, aber leider ist es ein ziemlich häufig verwendetes Muster, um dieses Problem mit verschachtelten Arrays zu lösen, bei denen das Casting in ein Objekt nicht funktioniert. Es ist auch möglich, dass OP eine Schnittstelle verwendet, die ein Objekt als Eingabe und kein Array erfordert.
– DiakonDesperado
19. Juni 2013 um 19:49 Uhr
Vergessen Sie nicht, dass Sie auf diese Weise alle außer den Grundtypen verlieren. DateTime wird zum Beispiel Konverter stdObject sein.
– Denis Pschenow
4. November 2014 um 17:33 Uhr
Ich habe gerade bemerkt, dass dies für einfache Arrays wie dieses nicht funktioniert: json_decode(json_encode([‘test’]),falsch); Dies ergibt das gleiche Array, das für die Eingabe verwendet wurde
– John Doe
28. Juni 2018 um 14:12 Uhr
@JohnDoe Die Frage bezieht sich auf assoziative Arrays, nicht auf einfache Arrays.
– Edson Medina
29. Juni 2018 um 16:15 Uhr
Sein Weg zu einfach, Dies wird auch ein Objekt für rekursive Arrays erstellen:
Welche Art von Objekt möchten Sie genau erhalten? Was ich meine ist: was sollten die Attribute sein?
– Pascal Martin
8. Dezember 2009 um 18:58 Uhr
In einer Schleife sollte es beides sein, da der Status ein Datenarray ist, sodass beide gedruckt werden
– Straßenparade
8. Dezember 2009 um 19:08 Uhr
nicht sicher ab wann, aber das funktioniert einfach:
$a = (object)['hello' => 'world'];
– Benutzer1267177
5. November 2016 um 11:44 Uhr