2017-01-26 6 views
1

多次元配列に動的にアクセスするには、設定ファイル内に完全なパスを表示する必要があります。以下は、あなたが特定のレベルで値にアクセスできることをどのように知っているかの例のカップルです。多次元配列内の値に動的にアクセスする方法

echo $results['Data']['MetaAttrListId']['0']; 

$string = "MetaAttrListId"; 
echo $results['Data'][$string]['0']; 

しかし、私ができることをしたいのは、その領域に完全な場所/パスを文字列で入力することです。そのようです。

$string = "['Data']['MetaAttrListId']['0']"; 
echo $results[$string]; 

多次元配列の出力がアクセスしています。

(
     [Data] => Array 
      (
       [MetaTitle] => Array 
        (
         [0] => Vauxhall combo 1.3 cdti in stunning condition low mileage long mot till august 
        ) 

       [MetaAttrListId] => Array 
        (
         [0] => Posted 
         [1] => Make 
         [2] => Model 
         [3] => Year 
         [4] => Mileage 
         [5] => Seller type 
         [6] => Body type 
         [7] => Fuel type 
         [8] => Transmission 
         [9] => Colour 
         [10] => Engine size 
        ) 

       [MetaAttrListValue] => Array 
        (
         [0] => 1 day ago 
         [1] => Vauxhall 
         [2] => COMBO 
         [3] => 2005 
         [4] => 79000 
         [5] => Private 
         [6] => Car Derived Van 
         [7] => Diesel 
         [8] => Manual 
         [9] => Red 
         [10] => 1248 
        ) 

      ) 

     [Error] => 
    ) 
+1

可能な重複el配列をキー名で?](http://stackoverflow.com/questions/27929875/how-to-write-getter-setter-to-access-multi-level-array-by-key-names) –

答えて

1

あなたは私が先日建て、この機能を試してみてください(また、私は今見つけていない別のstackoverflowのスレッドに触発さが、同様の質問があります)

value_in($arrayThingy, 'path.to.that.entry')またはvalue_in($arrayThingy, 'path/to/that/entry', '/')

のようにそれを使用します

はそれが役に立てば幸い、とあなたがものを見つけた場合に任意の失敗を報告してください。)マルチLEVにアクセスするためにゲッター/セッターを書く[方法の

/** 
* value_in 
* 
* @param mixed $haystack array or object or nested mix of both 
* @param string $path  path in any token-separated notation 
* @param string $token  path separator token 
* @return mixed    resolved value 
*/ 
function value_in($haystack, $path, $token = ".") { 
    $path = trim($path, $token); // path.to.place 
    $segments = explode($token, $path); // ["path", "to", "place"] 
    $remains = $haystack; 
    foreach ($segments as $segment) { 

     if (gettype($remains) === 'array' && isset($remains[$segment])) { 
      $remains = $remains[$segment]; 
     } else if (gettype($remains) === 'object' && isset($remains->$segment)) { 
      $remains = $remains->$segment; 

     } else { 
      return null; 
     } 
    } 
    return $remains; 
} 
関連する問題