Ich habe das folgende Array und wenn ich es tue print_r(array_values($get_user));
, bekomme ich:
Array (
[0] => 10499478683521864
[1] => 07/22/1983
[2] => [email protected]
[3] => Alan [4] => male
[5] => Malmsteen
[6] => https://www.facebook.com app_scoped_user_id/1049213468352864/
[7] => stdClass Object (
[id] => 102173722491792
[name] => Jakarta, Indonesia
)
[8] => id_ID
[9] => El-nino
[10] => Alan El-nino Malmsteen
[11] => 7
[12] => 2015-05-28T04:09:50+0000
[13] => 1
)
Ich habe versucht, wie folgt auf das Array zuzugreifen:
echo $get_user[0];
Aber das zeigt mir:
undefiniert 0
Hinweis:
Ich bekomme dieses Array aus dem Facebook SDK 4 , daher kenne ich die ursprüngliche Array-Struktur nicht.
Wie kann ich als Beispiel auf den Wert [email protected]
aus dem Array zugreifen ?
$demo =
?print_r
produziert es nicht. Wenn dies wirklich das Ergebnis vonprint_r
ist, können Sie schreibenecho array_values($get_user)[0];
Antworten:
Zugriff auf ein
array
oderobject
Sie, wie Sie zwei verschiedene Operatoren verwenden.Arrays
Um auf Array-Elemente zugreifen zu können, müssen Sie entweder verwenden
[]
oder Sie sehen nicht so viel, aber Sie können auch verwenden{}
.echo $array[0]; echo $array{0}; //Both are equivalent and interchangeable
Unterschied zwischen dem Deklarieren eines Arrays und dem Zugriff auf ein Array-Element
Das Definieren eines Arrays und der Zugriff auf ein Array-Element sind zwei verschiedene Dinge. Also nicht verwechseln.
Zum Definieren eines Arrays können Sie verwenden
array()
oder für PHP> = 5.4 verwenden[]
und Sie ordnen / setzen ein Array / -Element. Während, wenn Sie mit[]
oder auf ein Array-Element zugreifen{}
wie oben erwähnt Sie den Wert eines Array-Elements, das dem Festlegen eines Elements entgegengesetzt ist.Zugriff auf Array-Element
Um auf ein bestimmtes Element in einem Array zuzugreifen, können Sie einen beliebigen Ausdruck in
[]
oder verwenden{}
die dann wertet der Schlüssel Sie zugreifen möchten:Achten Sie also darauf, welchen Ausdruck Sie als Schlüssel verwenden und wie er von PHP interpretiert wird:
Zugriff auf mehrdimensionale Arrays
Wenn Sie mehrere Arrays ineinander haben, haben Sie einfach ein mehrdimensionales Array. Um auf ein Array-Element in einem Sub-Array zuzugreifen, müssen Sie nur mehrere verwenden
[]
.echo $array["firstSubArray"]["SecondSubArray"]["ElementFromTheSecondSubArray"] // ├─────────────┘ ├──────────────┘ ├────────────────────────────┘ // │ │ └── 3rd Array dimension; // │ └──────────────────── 2d Array dimension; // └───────────────────────────────────── 1st Array dimension;
Objekte
Um auf eine Objekteigenschaft zuzugreifen, müssen Sie verwenden
->
.Wenn Sie ein Objekt in einem anderen Objekt haben, müssen Sie nur mehrere verwenden
->
, um zu Ihrer Objekteigenschaft zu gelangen.echo $objectA->objectB->property;
Arrays & Objekte
Wenn Sie nun Arrays und Objekte miteinander gemischt haben, müssen Sie nur noch prüfen, ob Sie jetzt auf ein Array-Element oder eine Objekteigenschaft zugreifen und den entsprechenden Operator dafür verwenden.
Ich hoffe, dies gibt Ihnen eine ungefähre Vorstellung davon, wie Sie auf Arrays und Objekte zugreifen können, wenn diese ineinander verschachtelt sind.
Arrays, Objekte und Schleifen
Wenn Sie nicht nur auf ein einzelnes Element zugreifen möchten, können Sie Ihr verschachteltes Array / Objekt durchlaufen und die Werte einer bestimmten Dimension durchgehen.
Dazu müssen Sie nur auf die Dimension zugreifen, über die Sie eine Schleife ausführen möchten, und dann können Sie alle Werte dieser Dimension durchlaufen.
Als Beispiel nehmen wir ein Array, aber es könnte auch ein Objekt sein:
Array ( [data] => Array ( [0] => stdClass Object ( [propertyXY] => 1 ) [1] => stdClass Object ( [propertyXY] => 2 ) [2] => stdClass Object ( [propertyXY] => 3 ) ) )
Wenn Sie die erste Dimension durchlaufen, erhalten Sie alle Werte aus der ersten Dimension:
Bedeutet hier in der ersten Dimension, dass Sie nur 1 Element mit dem Schlüssel (
$key
)data
und dem Wert ($value
) haben würden:Array ( //Key: array [0] => stdClass Object ( [propertyXY] => 1 ) [1] => stdClass Object ( [propertyXY] => 2 ) [2] => stdClass Object ( [propertyXY] => 3 ) )
Wenn Sie die zweite Dimension durchlaufen, erhalten Sie alle Werte aus der zweiten Dimension:
Mittel hier in der zweiten Dimension Sie 3 Element mit den Tasten haben würden (
$key
)0
,1
,2
und die Werte ($value
):stdClass Object ( //Key: 0 [propertyXY] => 1 ) stdClass Object ( //Key: 1 [propertyXY] => 2 ) stdClass Object ( //Key: 2 [propertyXY] => 3 )
Und damit können Sie jede gewünschte Dimension durchlaufen, egal ob es sich um ein Array oder ein Objekt handelt.
var_dump()
/print_r()
/var_export()
Ausgabe analysierenAlle diese 3 Debug-Funktionen geben dieselben Daten nur in einem anderen Format oder mit einigen Metadaten (z. B. Typ, Größe) aus. Hier möchte ich zeigen, wie Sie die Ausgabe dieser Funktionen lesen müssen, um zu wissen, wie Sie auf bestimmte Daten von Ihrem Array / Objekt zugreifen können.
Eingabearray:
$array = [ "key" => (object) [ "property" => [1,2,3] ] ];
var_dump()
Ausgabe:array(1) { ["key"]=> object(stdClass)#1 (1) { ["property"]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } } }
print_r()
Ausgabe:Array ( [key] => stdClass Object ( [property] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) )
var_export()
Ausgabe:array ( 'key' => stdClass::__set_state(array( 'property' => array ( 0 => 1, 1 => 2, 2 => 3, ), )), )
Wie Sie sehen können, sind alle Ausgänge ziemlich ähnlich. Und wenn Sie jetzt auf den Wert 2 zugreifen möchten, können Sie einfach mit dem Wert selbst beginnen, auf den Sie zugreifen möchten, und sich nach oben links arbeiten.
1. Wir sehen zuerst, dass sich der Wert 2 in einem Array mit dem Schlüssel 1 befindet
Dies bedeutet, dass wir
[]
/ verwenden müssen,{}
um auf den Wert 2 mit zuzugreifen[1]
, da der Wert den Schlüssel / Index 1 hat.2. Als nächstes sehen wir, dass das Array einer Eigenschaft mit der Eigenschaft name eines Objekts zugewiesen ist
Dies bedeutet, dass wir verwenden müssen, um
->
auf die Eigenschaft des Objekts zuzugreifen, z->property
.Bis jetzt wissen wir also, dass wir verwenden müssen
->property[1]
.3. Und am Ende sehen wir, dass das äußerste ein Array ist
Da wir wissen, dass wir mit auf ein Array-Element zugreifen müssen
[]
, sehen wir hier, dass wir verwenden müssen, um["key"]
auf das Objekt zuzugreifen. Wir können jetzt alle diese Teile zusammenfügen und schreiben:echo $array["key"]->property[1];
Und die Ausgabe wird sein:
2
Lass dich nicht von PHP trollen!
Es gibt ein paar Dinge, die Sie wissen müssen, damit Sie nicht stundenlang damit verbringen, sie zu finden.
"Versteckte" Zeichen
Manchmal haben Sie Zeichen in Ihren Schlüsseln, die Sie beim ersten Blick im Browser nicht sehen. Und dann fragen Sie sich, warum Sie nicht auf das Element zugreifen können. Diese Zeichen können sein: Registerkarten (
\t
), neue Linien (\n
), Leerzeichen oder HTML - Tags (zB</p>
,<b>
) usw.Als Beispiel, wenn Sie sich die Ausgabe von ansehen
print_r()
und sehen:Array ( [key] => HERE )
Dann versuchen Sie, auf das Element zuzugreifen mit:
echo $arr["key"];
Aber Sie bekommen die Nachricht:
Dies ist ein guter Hinweis darauf, dass einige versteckte Zeichen vorhanden sein müssen, da Sie nicht auf das Element zugreifen können, selbst wenn die Schlüssel ziemlich korrekt erscheinen.
Der Trick hier ist,
var_dump()
+ in Ihren Quellcode zu schauen! (Alternative:highlight_string(print_r($variable, TRUE));
)Und plötzlich werden Sie vielleicht solche Dinge sehen:
array(1) { ["</b> key"]=> string(4) "HERE" }
Jetzt werden Sie sehen, dass Ihr Schlüssel ein HTML-Tag + ein neues Zeilenzeichen enthält, das Sie seitdem überhaupt nicht gesehen haben,
print_r()
und der Browser hat das nicht angezeigt.Wenn Sie also versuchen, Folgendes zu tun:
echo $arr["</b>\nkey"];
Sie erhalten die gewünschte Ausgabe:
Vertrauen Sie niemals der Ausgabe von
print_r()
odervar_dump()
wenn Sie sich XML ansehenMöglicherweise ist eine XML-Datei oder eine Zeichenfolge in ein Objekt geladen, z
<?xml version="1.0" encoding="UTF-8" ?> <rss> <item> <title attribute="xy" ab="xy">test</title> </item> </rss>
Wenn Sie jetzt verwenden
var_dump()
oderprint_r()
Sie werden sehen:SimpleXMLElement Object ( [item] => SimpleXMLElement Object ( [title] => test ) )
Wie Sie sehen können, sehen Sie die Attribute des Titels nicht. Also, wie gesagt, vertraue niemals der Ausgabe von
var_dump()
oderprint_r()
wenn du ein XML-Objekt hast. Verwenden Sie immerasXML()
, um die vollständige XML-Datei / Zeichenfolge anzuzeigen.Verwenden Sie also einfach eine der folgenden Methoden:
echo $xml->asXML(); //And look into the source code highlight_string($xml->asXML()); header ("Content-Type:text/xml"); echo $xml->asXML();
Und dann erhalten Sie die Ausgabe:
<?xml version="1.0" encoding="UTF-8"?> <rss> <item> <title attribute="xy" ab="xy">test</title> </item> </rss>
Weitere Informationen finden Sie unter:
Allgemein (Symbole, Fehler)
Probleme mit Eigenschaftsnamen
quelle
echo $demo[2];
Dont' let PHP troll you
:))Aus der Frage können wir die Struktur des Eingabearrays nicht erkennen. Es vielleicht
array ('id' => 10499478683521864, 'date' => '07/22/1983')
. Wenn Sie also $ demo [0] fragen, verwenden Sie den Index undefind.Array_values verlor Schlüssel und gab Array mit zahlreichen Schlüsseln zurück, die Array als
array(10499478683521864, '07/22/1983'...)
. Dieses Ergebnis sehen wir in der Frage.Sie können also auf die gleiche Weise Werte für Array-Elemente verwenden
echo array_values($get_user)[0]; // 10499478683521864
quelle
array_values()
?! Völlig unnötig hierarray_values()
tut.Wenn Ihre Ausgabe von
print_r($var)
zB ist:Array ( [demo] => Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => [email protected] ) )
dann mach
$var['demo'][0]
Wenn die Ausgabe von
print_r($var)
zB ist:Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => [email protected] )
dann mach
$var[0]
quelle
Ich habe eine kleine Funktion für den Zugriff auf Eigenschaften in Arrays oder Objekten geschrieben. Ich benutze es ziemlich oft und finde es ziemlich praktisch
/** * Access array or object values easily, with default fallback */ if( ! function_exists('element') ) { function element( &$array, $key, $default = NULL ) { // Check array first if( is_array($array) ) { return isset($array[$key]) ? $array[$key] : $default; } // Object props if( ! is_int($key) && is_object($array) ) { return property_exists($array, $key) ? $array->{$key} : $default; } // Invalid type return NULL; } }
quelle
Sie können verwenden
$ar = (array) $get_user;
dann können Sie arra-weise auf ihre Indizes zugreifen:
echo $ar[0];
quelle