2017-05-09 9 views
-2

Ich habe eine Klasse, die es ermöglicht, ein Array nach der Syntax "key.key2.key3" abzurufen.Überprüfen, ob Kind des Arrays Objekt oder Array ist

Für jetzt kein Problem. Probleme treten auf, wenn einer der Schlüssel ein Objekt ist. Da muss ich überprüfen, dass der Schlüssel ein Array oder ein Objekt ist

Meine Skriptfehler, wenn ich versuche, zu bestimmen, ob der Typ des Schlüssels [key2] = Array = oder ob der Typ key-> key2 ==. Eine der beiden Bedingungen kann falsch sein. (Wenn das Skript den Schlüssel [key2] == array testet und key2 beispielsweise ein Objekt ist).

Gibt es eine Möglichkeit zu überprüfen, dass key2 ein Array oder ein Objekt ist, ohne den Schlüssel [key2] oder key-> key2?

Danke.

+2

teilen Code –

+2

[ 'is_array()'] (http://php.net/manual/en/function.is-array.php) [ 'is_object() '] (http://php.net/manual/en/function.is-object.php) –

+0

Ich habe bereits is_array() und is_object() verwendet, aber nicht wie im Beispiel von trincot. Das Beispiel von Trincot funktioniert, ich habe diese beiden Funktionen nicht auf diese Weise benutzt. –

Antwort

0

Sie müssen den Test auf dem Elternteil, vor Zugriff auf den Schlüssel auszuführen. Hier

ein Beispiel:

function findValue($a, $s) { 
    $keys = explode(".", $s); 
    foreach ($keys as $key) { 
     if (is_object($a)) { 
      $a = $a->$key; 
     } else if (is_array($a)) { 
      $a = $a[$key]; 
     } else { // unexpected 
      return null; 
     } 
    } 
    return $a; 
} 

// Sample data: mix of object and array: 
$arr = [ 
    "key1" => (object) [ 
     "key2" => [ 
      "key3" => 42 
     ] 
    ] 
]; 

echo findValue($arr, "key1.key2.key3"); // 42 
0

Was ist mit is_array()?

Docs here

Verwandte Themen