2011-01-30 6 views
1

私はこの作品多次元配列があります。PHP変数変数配列のキーリスト

print_r($temp[1][0]); 

私はこの作業を行うことができます...私はこのような文字列としてキーのリストを持っている方法:

$keys = "[1][0]"; 

キーの文字列リストを使用して配列にアクセスするにはどうしたらいいですか? は、これは動作しますが、キーは明らかにハードコーディングされています

$keys = "[1][0]"; 
$tempName = 'temp'; 

print_r(${$tempName}[1][0]); 

// tried lots of variations like, but they all produce errors or don't access the array 
print_r(${$tempName.${$keys}}); 

おかげで、 クリス

+0

おめでとうございます。あなたは私がSOに見た根本的に壊れたアイデア/コードのために私の新しい個人的な記録を設定しました。 "可変変数はきちんとしていますが、どれくらいの距離をとることができるか見てみましょう..." – delnan

答えて

4
function accessArray(array $array, $keys) { 
    if (!preg_match_all('~\[([^\]]+)\]~', $keys, $matches, PREG_PATTERN_ORDER)) { 
     throw new InvalidArgumentException; 
    } 

    $keys = $matches[1]; 
    $current = $array; 
    foreach ($keys as $key) { 
     $current = $current[$key]; 
    } 

    return $current; 
} 

echo accessArray(
    array(
     1 => array(
      2 => 'foo' 
     ) 
    ), 
    '[1][2]' 
); // echos 'foo' 

もよりよいだろう、あなたの代わりに[1][2]の、array(1, 2)に渡された場合:一つは(もろいを避けることができ)preg_match_allを解析します。

+0

私はこのアプローチが気に入っています。 –

+0

さて、私はそれを「エレガントな」と呼んでいませんが、少なくとも安全です;) – NikiC