2016-12-09 1 views
1

内の複数のキーとして変数は、あなたはPHP:使用ノーマルアレイでは多次元配列

$key='example'; 
echo $array[$key]; 

方法について多次元でこの方法を選択することができますか?

$keys='example[secondDimension][thirdDimension]'; 
echo $array[$keys]; 

これについて適切な方法はありますか?

+0

2つの変数を使用する必要があります。 –

+0

質問の例の3つの変数。 –

+0

さて、私は鍵としての意味がありました。 '$ example [$ key1] [$ key2];' –

答えて

1

私はこのソリューションは良いと思います:あなたが第二の次元で何かをする必要があり多次元配列を参照の一般的なパターンは次のようなものです。

"["と "]"ですべてのキーをラップする必要があることに注意してください。あなたも値が定義されているか、あなたはその機能に、より良い名前を与えるこの機能

function array_check_is_value_set_from_plain_keys($array, $keys) 
{ 
    $result; 

    $keys = str_replace(array('[', ']'), array("['", "']"), $keys); // wrapping with "'" (single qoutes) 

    eval('$result = isset($array' . $keys . ');'); 

    return $result; 
} 

を使用することができないかどうかを確認したい場合は

$array = array(
    'example' => array(
     'secondDimension' => array(
      'thirdDimension' => 'Hello from 3rd dimension', 
     ) 
    ), 
); 

function array_get_value_from_plain_keys($array, $keys) 
{ 
    $result; 

    $keys = str_replace(array('[', ']'), array("['", "']"), $keys); // wrapping with "'" (single qoutes) 

    eval('$result = $array' . $keys . ';'); 

    return $result; 
} 

$keys = '[example][secondDimension][thirdDimension]'; // wrap 1st key with "[" and "]" 
echo array_get_value_from_plain_keys($array, $keys); 

eval()機能

についての詳細を学びます

+1

'eval()'を使うのは、特にユーザ入力の可能性がある場合は、一般的には悪い考えです。 –

+0

実際、これは私が探していたものに非常に近いです...あなたがしたことに本当に注意を払うために時間を費やした後。私は実際にevalでそれをやってみた。あなたはそれを釘付けにした。ありがとう! そして、はい、Jeremy、私はevalのセキュリティ上の懸念を認識しています。 IMOでは、ユーザーの入力情報がミックスに入ることがないと確信している限り、安全でなければなりません。関数にいくつかエスケープを追加して確実に追加することもできますが、最善のケースはユーザーの入力を遠くに保つことです。間違いなく私が心に留めておくべきこと。あなたもありがとう。 –

0

アレイの各次元に別々の変数を使用する必要があります。

$pets = [ 
    'dog' => ['Jack', 'Fido', 'Woofie'], 
    'cat' => ['Muggles', 'Snowball', 'Kitty'], 
]; 

// Loop through keys in first dimension 
foreach ($pets as $type => $names) { 

    foreach ($names as $index => $name) { 

     // And do something with second dimension using the variable 
     // you've gained access to in the foreach 
     $pets[$type][$index] = strtoupper($name); 

    } 

} 
+0

ご意見ありがとうございます。これは、通常、多次元配列を処理する方法です。この場合、私は低コストで極端で多様な深みに行くことができるものを探していました。特に何かが組み込まれていました。とにかく、ありがとう! –