Für den Zugriff auf eine array
oder object
Sie, wie Sie zwei verschiedene Operatoren verwenden.
Um auf Array-Elemente zuzugreifen, müssen Sie verwenden []
.
echo $array[0];
Bei älteren PHP-Versionen wird eine alternative Syntax verwendet {}
erlaubt war auch:
echo $array{0};
Unterschied zwischen der Deklaration eines Arrays und dem Zugriff auf ein Arrayelement
Das Definieren eines Arrays und der Zugriff auf ein Array-Element sind zwei verschiedene Dinge. Also nicht verwechseln.
Um ein Array zu definieren, können Sie verwenden array()
oder für PHP >=5.4 []
und Sie weisen/setzen ein Array/-Element. Während Sie mit auf ein Array-Element zugreifen []
Wie oben erwähnt, erhalten Sie den Wert eines Array-Elements im Gegensatz zum Setzen eines Elements.
//Declaring an array
$arrayA = array ( /*Some stuff in here*/ );
$arrayB = [ /*Some stuff in here*/ ]; //Only for PHP >=5.4
//Accessing an array element
echo $array[0];
Greifen Sie auf das Array-Element zu
Um auf ein bestimmtes Element in einem Array zuzugreifen, können Sie einen beliebigen Ausdruck darin verwenden []
oder {}
die dann den Schlüssel auswertet, auf den Sie zugreifen möchten:
$array[(Any expression)]
Achten Sie also darauf, welchen Ausdruck Sie als Schlüssel verwenden und wie er von PHP interpretiert wird:
echo $array[0]; //The key is an integer; It accesses the 0's element
echo $array["0"]; //The key is a string; It accesses the 0's element
echo $array["string"]; //The key is a string; It accesses the element with the key 'string'
echo $array[CONSTANT]; //The key is a constant and it gets replaced with the corresponding value
echo $array[cOnStAnT]; //The key is also a constant and not a string
echo $array[$anyVariable] //The key is a variable and it gets replaced with the value which is in '$anyVariable'
echo $array[functionXY()]; //The key will be the return value of the function
Greifen Sie auf ein mehrdimensionales Array zu
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 multiple verwenden []
.
echo $array["firstSubArray"]["SecondSubArray"]["ElementFromTheSecondSubArray"]
// ├─────────────┘ ├──────────────┘ ├────────────────────────────┘
// │ │ └── 3rd Array dimension;
// │ └──────────────────── 2d Array dimension;
// └───────────────────────────────────── 1st Array dimension;
Um auf eine Objekteigenschaft zuzugreifen, müssen Sie verwenden ->
.
echo $object->property;
Wenn Sie ein Objekt in einem anderen Objekt haben, müssen Sie nur mehrere verwenden ->
um zu Ihrem Objekt zu gelangen.
echo $objectA->objectB->property;
Notiz:
-
Sie müssen auch vorsichtig sein, wenn Sie einen ungültigen Eigenschaftsnamen haben! Um alle Probleme zu sehen, denen Sie mit einem ungültigen Eigenschaftsnamen begegnen können, sehen Sie sich diese Frage/Antwort an. Und besonders diese, wenn Sie Zahlen am Anfang des Eigenschaftsnamens haben.
-
Sie können nur mit public auf Eigenschaften zugreifen Sichtweite von außerhalb der Klasse. Andernfalls (privat oder geschützt) benötigen Sie eine Methode oder Reflexion, mit der Sie den Wert der Immobilie ermitteln können.
Arrays & Objekte
Wenn Sie nun Arrays und Objekte miteinander vermischt haben, müssen Sie nur noch schauen, ob Sie jetzt auf ein Array-Element oder eine Objekteigenschaft zugreifen und den entsprechenden Operator dafür verwenden.
//Object
echo $object->anotherObject->propertyArray["elementOneWithAnObject"]->property;
//├────┘ ├───────────┘ ├───────────┘ ├──────────────────────┘ ├──────┘
//│ │ │ │ └── property ;
//│ │ │ └───────────────────────────── array element (object) ; Use -> To access the property 'property'
//│ │ └─────────────────────────────────────────── array (property) ; Use [] To access the array element 'elementOneWithAnObject'
//│ └────────────────────────────────────────────────────────── property (object) ; Use -> To access the property 'propertyArray'
//└────────────────────────────────────────────────────────────────── object ; Use -> To access the property 'anotherObject'
//Array
echo $array["arrayElement"]["anotherElement"]->object->property["element"];
//├───┘ ├────────────┘ ├──────────────┘ ├────┘ ├──────┘ ├───────┘
//│ │ │ │ │ └── array element ;
//│ │ │ │ └─────────── property (array) ; Use [] To access the array element 'element'
//│ │ │ └─────────────────── property (object) ; Use -> To access the property 'property'
//│ │ └────────────────────────────────────── array element (object) ; Use -> To access the property 'object'
//│ └────────────────────────────────────────────────────── array element (array) ; Use [] To access the array element 'anotherElement'
//└──────────────────────────────────────────────────────────── array ; Use [] To access the array element 'arrayElement'
Ich hoffe, das gibt Ihnen eine ungefähre Vorstellung davon, wie Sie auf Arrays und Objekte zugreifen können, wenn sie ineinander verschachtelt sind.
Notiz:
-
Ob es als Array oder Objekt bezeichnet wird, hängt vom äußersten Teil Ihrer Variablen ab. Damit [new StdClass]
ist ein Reihe auch wenn es (verschachtelte) Objekte darin hat und $object->property = array();
ist ein Objekt auch wenn es (verschachtelte) Arrays enthält.
Und wenn Sie sich nicht sicher sind, ob Sie ein Objekt oder ein Array haben, verwenden Sie einfach gettype()
.
-
Lassen Sie sich nicht verwirren, wenn jemand einen anderen Programmierstil verwendet als Sie:
//Both methods/styles work and access the same data
echo $object->anotherObject->propertyArray["elementOneWithAnObject"]->property;
echo $object->
anotherObject
->propertyArray
["elementOneWithAnObject"]->
property;
//Both methods/styles work and access the same data
echo $array["arrayElement"]["anotherElement"]->object->property["element"];
echo $array["arrayElement"]
["anotherElement"]->
object
->property["element"];
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 durchlaufen.
Dazu müssen Sie nur auf die Dimension zugreifen, die Sie durchlaufen möchten, und dann können Sie alle Werte dieser Dimension durchlaufen.
Als Beispiel nehmen wir ein Array, es könnte aber 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:
foreach($array as $key => $value)
Bedeutet hier in der ersten Dimension hätten Sie nur 1 Element mit dem Schlüssel($key
) data
und der Wert ($value
):
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:
foreach($array["data"] as $key => $value)
Bedeutet hier in der zweiten Dimension hätten Sie 3 Elemente mit den Schlüsseln ($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.
Alle diese 3 Debug-Funktionen geben dieselben Daten aus, nur in einem anderen Format oder mit einigen Metadaten (z. B. Typ, Größe). Hier möchte ich also zeigen, wie Sie die Ausgabe dieser Funktionen lesen müssen, um zu wissen, wie Sie auf bestimmte Daten aus Ihrem Array/Objekt zugreifen können.
Eingangsarray:
$array = [
"key" => (object) [
"property" => [1,2,3]
]
];
var_dump()
Ausgang:
array(1) {
["key"]=>
object(stdClass)#1 (1) {
["property"]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
}
}
print_r()
Ausgang:
Array
(
[key] => stdClass Object
(
[property] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
)
var_export()
Ausgang:
array (
'key' =>
(object) array(
'property' =>
array (
0 => 1,
1 => 2,
2 => 3,
),
),
)
Wie Sie sehen können, sind alle Ausgaben ziemlich ähnlich. Und wenn Sie jetzt auf den Wert 2 zugreifen möchten, können Sie einfach bei dem Wert selbst beginnen, auf den Sie zugreifen möchten, und sich nach “oben links” vorarbeiten.
1. Wir sehen zuerst, dass der Wert 2 in einem Array mit dem Schlüssel 1 steht
// var_dump()
array(3) {
[0]=>
int(1)
[1]=>
int(2) // <-- value we want to access
[2]=>
int(3)
}
// print_r()
Array
(
[0] => 1
[1] => 2 // <-- value we want to access
[2] => 3
)
// var_export()
array (
0 => 1,
1 => 2, // <-- value we want to access
2 => 3,
)
Das bedeutet, dass wir verwenden müssen []
um auf den Wert 2 zuzugreifen [1]
da der Wert den Schlüssel/Index 1 hat.
2. Als nächstes sehen wir, dass das Array einer Eigenschaft mit dem Namen Eigenschaft eines Objekts zugewiesen ist
// var_dump()
object(stdClass)#1 (1) {
["property"]=>
/* Array here */
}
// print_r()
stdClass Object
(
[property] => /* Array here */
)
// var_export()
(object) array(
'property' =>
/* Array here */
),
Das 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
// var_dump()
array(1) {
["key"]=>
/* Object & Array here */
}
// print_r()
Array
(
[key] => stdClass Object
/* Object & Array here */
)
// var_export()
array (
'key' =>
/* Object & Array here */
)
Da wir wissen, dass wir mit auf ein Array-Element zugreifen müssen []
sehen wir hier, dass wir verwenden müssen ["key"]
um auf das Objekt zuzugreifen. Wir können nun alle diese Teile zusammensetzen und schreiben:
echo $array["key"]->property[1];
Und die Ausgabe wird sein:
2
Lassen Sie sich von PHP nicht täuschen!
Es gibt ein paar Dinge, die Sie wissen müssen, damit Sie nicht Stunden damit verbringen, sie zu finden.
-
“Versteckte” Zeichen
Manchmal haben Sie Zeichen in Ihren Schlüsseln, die Sie auf den ersten Blick im Browser nicht sehen. Und dann fragt man sich, warum man nicht auf das Element zugreifen kann. Diese Zeichen können sein: Tabulatoren (\t
), neue Zeilen (\n
), Leerzeichen oder HTML-Tags (zB </p>
, <b>
), etc.
Als Beispiel, wenn Sie sich die Ausgabe von ansehen print_r()
und du siehst:
Array ( [key] => HERE )
Dann versuchen Sie, auf das Element zuzugreifen mit:
echo $arr["key"];
Aber Sie bekommen den Hinweis:
Hinweis: Undefinierter Index: Schlüssel
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 zu sein scheinen.
Der Trick hier ist zu verwenden var_dump()
+ Schauen Sie in Ihren Quellcode! (Alternative: highlight_string(print_r($variable, TRUE));
)
Und plötzlich werden Sie vielleicht Dinge wie diese sehen:
array(1) {
["</b>
key"]=>
string(4) "HERE"
}
Jetzt werden Sie sehen, dass Ihr Schlüssel ein HTML-Tag + ein Zeilenumbruchzeichen enthält, das Sie von Anfang an nicht gesehen haben print_r()
und der Browser hat das nicht angezeigt.
Also jetzt, wenn Sie versuchen, Folgendes zu tun:
echo $arr["</b>\nkey"];
Sie erhalten Ihre gewünschte Ausgabe:
HERE
-
Vertrauen Sie niemals der Ausgabe von print_r()
oder var_dump()
wenn Sie sich XML ansehen
Möglicherweise haben Sie eine XML-Datei oder einen String in ein Objekt geladen, z
<?xml version="1.0" encoding="UTF-8" ?>
<rss>
<item>
<title attribute="xy" ab="xy">test</title>
</item>
</rss>
Nun, wenn Sie verwenden var_dump()
oder print_r()
du wirst sehen:
SimpleXMLElement Object
(
[item] => SimpleXMLElement Object
(
How can I access an array/object? => test
)
)
Wie Sie sehen können, sehen Sie die Attribute des Titels nicht. Also wie gesagt traue niemals der Ausgabe von var_dump()
oder print_r()
wenn Sie ein XML-Objekt haben. Verwenden Sie immer asXML()
um die vollständige XML-Datei/String anzuzeigen.
Verwenden Sie also einfach eine der unten gezeigten Methoden:
echo $xml->asXML(); //And look into the source code
highlight_string($xml->asXML());
header ("Content-Type:text/xml");
echo $xml->asXML();
Und dann bekommst du 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:
Allgemeines (Symbole, Fehler)
- Referenz — Was bedeutet dieses Symbol in PHP?
- Referenz – Was bedeutet dieser Fehler in PHP?
- PHP-Parse-/Syntaxfehler; und wie man sie löst
Probleme mit Eigenschaftsnamen
- Wie kann ich auf eine Property mit einem ungültigen Namen zugreifen?
- Wie greife ich auf Objekteigenschaften mit Namen wie Ganzzahlen oder ungültigen Eigenschaftsnamen zu?
1. Haben Sie etwas ausprobiert? 2. Dies ist grundlegendes PHP, wie man auf ein Array oder Objekt zugreift
– Rizier123
6. Juni 2015 um 9:05 Uhr
Bitte zeigen Sie etwas Mühe, was Sie bisher versucht haben
– Narendrasingh Sisodia
6. Juni 2015 um 9:07 Uhr
Aktualisiert Leute, brauche Hilfe von euch 🙂
– Muhamad Yulianto
6. Juni 2015 um 9:09 Uhr
@AlanEl-ninoMalmsteen Und was wäre die erwartete Ausgabe?
– Rizier123
6. Juni 2015 um 9:10 Uhr
Von wo ist
$demo =
?print_r
produziert es nicht. Wenn das wirklich Folge davon istprint_r
dann kannst du schreibenecho array_values($get_user)[0];
– Spritzer58
6. Juni 2015 um 9:35 Uhr