Wie kann ich auf ein Array/Objekt zugreifen?

Lesezeit: 14 Minuten

Wie kann ich auf ein ArrayObjekt zugreifen
Muhamad Julianto

Ich habe das folgende Array und wenn ich es tue print_r(array_values($get_user));Ich bekomme:

Array (
          [0] => 10499478683521864
          [1] => 07/22/1983
          [2] => email@saya.com
          [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, auf das Array wie folgt zuzugreifen:

echo $get_user[0];

Aber das zeigt mir:

undefiniert 0

Notiz:

Ich bekomme dieses Array von der Facebook-SDK 4also kenne ich die ursprüngliche Array-Struktur nicht.

Wie kann ich als Beispiel auf den Wert zugreifen email@saya.com aus dem Array?

  • 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 ist print_r dann kannst du schreiben echo array_values($get_user)[0];

    – Spritzer58

    6. Juni 2015 um 9:35 Uhr

Wie kann ich auf ein ArrayObjekt zugreifen
Rizier123

Für den Zugriff auf eine array oder object Sie, wie Sie zwei verschiedene Operatoren verwenden.

Arrays

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;

Objekte

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:

  1. 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.

  2. 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:

  1. 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().

  2. 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.

Analysieren var_dump() / print_r() / var_export() Ausgang

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.

  1. “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
    
  2. 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?

  • @AlanEl-ninoMalmsteen Was ist dein erwartete Ausgabe ?

    – Rizier123

    6. Juni 2015 um 9:35 Uhr

  • @AlanEl-ninoMalmsteen poste dein ursprüngliches Array

    – Narendrasingh Sisodia

    6. Juni 2015 um 9:38 Uhr

  • @AlanEl-ninoMalmsteen Um die E-Mail zu erhalten, verwenden Sie:echo $demo[2];

    – Rizier123

    6. Juni 2015 um 9:49 Uhr

  • @ Rizier123 gerade hast du meine Frage doppelt markiert, kannst du hier bitte helfen, den Array-Wert zu bekommen.

    – Mujahedh

    4. Juli 2016 um 8:11 Uhr

  • Ich mag das Teil Dont' let PHP troll you :))

    – cat_minhv0

    7. Dezember 2018 um 9:08 Uhr

Wie kann ich auf ein ArrayObjekt zugreifen
spritzen58

Aus der Frage können wir die Struktur des Eingabearrays nicht erkennen. Es kann sein array ('id' => 10499478683521864, 'date' => '07/22/1983'). Wenn Sie also $demo fragen[0] Sie verwenden den Undefind-Index.

Array_values ​​hat Schlüssel verloren und gibt ein Array mit zahlreichen Schlüsseln zurück, die ein Array als machen array(10499478683521864, '07/22/1983'...). Dieses Ergebnis sehen wir in der Frage.

Sie können also auf die gleiche Weise die Werte eines Array-Elements übernehmen

echo array_values($get_user)[0]; // 10499478683521864 

  • Warum array_values() ?! Völlig unnötig hier

    – Rizier123

    6. Juni 2015 um 9:50 Uhr

  • @AlanEl-ninoMalmsteen Wow, das zeigt mir nur, dass du meine Antwort nicht einmal gelesen hast.

    – Rizier123

    6. Juni 2015 um 9:54 Uhr


  • @ Rizier123 vor der Abstimmung denken Sie vielleicht, dass wir die Array-Struktur aus der Frage nicht kennen. Sehen Sie sich nur das Ergebnis von print_r (array_values ​​()) an. Vielleicht Array (“a’ => ‘b” … aber array_values[0] wird in jedem Fall ‘b’ sein

    – Spritzer58

    6. Juni 2015 um 9:56 Uhr


  • @splash58 Sie sehen die Array-Struktur sehr deutlich in der Antwort von OP. Und du sagst nicht einmal, was array_values() tut.

    – Rizier123

    6. Juni 2015 um 9:58 Uhr

  • Ich sehe keine Struktur des Arrays. Sie liegen falsch. Und was Werte angeht, so liegen Sie gerade richtig

    – Spritzer58

    6. Juni 2015 um 10:01 Uhr

Wenn Ihre Ausgabe von print_r($var) ist zB:

    Array ( [demo] => Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => email@saya.com ) )

dann mach $var['demo'][0]

Wenn die Ausgabe von print_r($var) ist zB:

    Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => email@saya.com )

dann mach $var[0]

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;
  }
}

1647096855 634 Wie kann ich auf ein ArrayObjekt zugreifen
Dharmesh Narshibhai Tukadiya

function kPrint($key,$obj){    
return (gettype($obj)=="array"?(array_key_exists($key,$obj)?$obj[$key]:("<font color="red">NA</font>")):(gettype($obj)=="object"?(property_exists($obj,$key)?$obj->$key:("<font color="red">NA</font>")):("<font color="red"><font color="green">:::Exception Start:::</font><br>Invalid Object/Array Passed at kPrint() Function!!<br> At : Variable => ".print_r($obj)."<br>Key => ".$key."<br> At File: <font color="blue">".debug_backtrace()[0]['file']."</font><br> At Line : ".debug_backtrace()[0]['line']."<br><font color="green">:::Exception End:::</font></font>")));}

//Sie können diese Funktion aufrufen, wann immer Sie auf ein Element aus dem Array oder Objekt zugreifen möchten. Diese Funktion druckt den jeweiligen Wert aus dem Array/Objekt gemäß Schlüssel.

  • Bitte bearbeiten Sie den Kommentar und machen Sie ihn lesbarer. Erklären Sie hier, was genau Sie getan haben. keine HTML-Tags erforderlich

    – Eden Mosche

    2. März um 11:10 Uhr

1647096856 480 Wie kann ich auf ein ArrayObjekt zugreifen
Morteza Kavakebi

Sie können verwenden

$ar = (array) $get_user;

dann können Sie arra-weise auf ihre Indizes zugreifen:

echo $ar[0];

  • Bitte bearbeiten Sie den Kommentar und machen Sie ihn lesbarer. Erklären Sie hier, was genau Sie getan haben. keine HTML-Tags erforderlich

    – Eden Mosche

    2. März um 11:10 Uhr

994050cookie-checkWie kann ich auf ein Array/Objekt zugreifen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy