2011-08-08 15 views
2

配列の要素を含む文字列があります。文字列からPHP呼び出し配列

$str = '[some][string]'; 
$array = array(); 

にはどうすれ$strを使用して$array['some']['string']の値を得ることができますか?

これは、キーの任意の数のために動作します
+3

私はあなたが何をしようとして考えてはとてもではないでしょうとにかく良い練習。 '$ array [$ key1] [$ key2]'を実行する方が良いでしょう。 –

答えて

3

あなたはそれを使用して快適かどうか知りませんが、evalを使用して行うことができます。

$array['some']['string'] = 'test';  
$str = '[some][string]';  
$code = sprintf('return $array%s;', str_replace(array('[',']'), array('[\'', '\']'), $str));  
$value = eval($code);  
echo $value; # test 

しかし、evalをあなたがそれを使用する必要があるときにデザイン上の欠陥があることが最もよく示されているため、常に適切なツールではありません。

あなたは配列項目へのアクセスを記述する必要がある場合は別の例として、次の操作を実行できます。

$array['some']['string'] = 'test'; 
$str = '[some][string]'; 
$path = explode('][', substr($str, 1, -1)); 
$value = &$array; 
foreach($path as $segment) 
{ 
    $value = &$value[$segment]; 
} 

echo $value; 
$value = 'changed'; 
print_r($array); 

これは実際Eric's answerではなく、変数を参照すると同じ原理です。

+0

彼はそれに慣れていない場合は、彼は文字列をそのように保存すべきではない – Eric

+0

あなたはevalの –

+0

@Ericを使用する必要はありませんが:。分からないのですが、あなたのソリューションは非常に良く見えます:) – hakre

1
// trim the start and end brackets  
$str = trim($str, '[]'); 
// explode the keys into an array 
$keys = explode('][', $str); 
// reference the array using the stored keys 
$value = $array[$keys[0][$keys[1]]; 
+0

これは動作しません。 – hakre

+0

こんにちは、大きな配列はどうですか?とにかく、お返事ありがとう! –

+0

大きな配列は元の質問の一部ではありませんでした! –

4

$keys = explode('][', substr($str, 1, -1)); 
$value = $array; 
foreach($keys as $key) 
    $value = $value[$key]; 

echo $value 
+0

は実は、これが最良のcase.Iが@hakreから受け入れを削除しませんが、私が参加したことすべてに.Thanks +あなたを与えたです! –

+0

多目的配列では機能しません。 –

+0

@Daniel:詳細を教えてください。 [それは私の作品](http://ideone.com/tXd6tG) – Eric

0

私は正規表現が良いトリックを行うべきだと思う:

$array['some']['string'] = 'test'; 
$str = '[some][string]'; 
if (preg_match('/\[(?<key1>\w+)\]\[(?<key2>\w+)\]/', $str, $keys)) 
{ 
    if (isset($array[$keys['key1']][$keys['key2']])) 
     echo $array[$keys['key1']][$keys['key2']]; // do what you need 
} 

をしかし、私は配列であなたの方法を扱う前に、二回と思うだろう:D

関連する問題