2017-05-09 22 views
-2

"key.key2.key3"という構文に従って配列を取り出すことができるクラスがあります。配列の子がオブジェクトか配列かを確認してください

今のところ問題ありません。問題は、キーの1つがオブジェクトである場合に発生します。 キーが配列かオブジェクトかをチェックする必要があるので

キーのタイプ[key2] ==配列かkey-> key2 == objectかどうかを判断しようとするとスクリプトのバグが発生します。 2つの条件の1つが誤っている可能性があります。 (もしスクリプトがキー[key2] ==配列をテストし、そのkey2がオブジェクトであれば)。

[key2]キーまたはkey-> key2キーを使用せずにkey2が配列またはオブジェクトであることを確認する方法はありますか?

ありがとうございました。

+2

共有コード –

+2

[ 'IS_ARRAY()'](http://php.net/manual/en/function.is-array.php)[ 'is_object:ここ

は一例で() '](http://php.net/manual/en/function.is-object.php) –

+0

私はすでにis_array()とis_object()を使用していますが、trincotの例のように使用していません。トリコットの例が動作し、私はこのような2つの関数を使用しませんでした。 –

答えて

0

hereあなたがキーにアクセスする前に、親にテストを実行する必要があります。

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

is_array()

ドキュメント

関連する問題