2017-11-17 17 views
0

解析する必要があるかなり大きい配列がありますが、有効/無効のパラメータによってリクエストが変わります。例えば配列リクエストにパラメータを追加する

$array['a'][1]['b'][1]['c'][1] = 'asd'; 
$str = $array['a'][1]; 

dd($str); 

これは私を与えるだろう:

Array 
(
    [b] => Array 
    (
     [1] => Array 
     (
      [c] => Array 
      (
       [1] => asd 
      ) 

     ) 

    ) 

) 

もちろん、正しいされており、。しかし、今私が知っているなら、私は次のパラメータも必要とします。それには$str = $array['a'][1]['b'];のように追加する必要があります。

しかし、あまりにも多くの組み合わせがあるので、私は手動で通話を構築することができれば、私は "、このような何かを疑問に思った:

$str = $array['a'][1]; 
if ($b) { 
    $str .= ['b'][1]; 
} 
if ($c) { 
    $str .= ['c'][1]; 
} 

dd($str); 

任意のヒントが理解されるであろう

PS:私は知っています私はevalでこれを行うことができますが、実際にはよりよい解決策を探していました:

eval("\$str = \$array$str;"); 
dd($str); 
+0

あなたは '[1] [A] ...' キーシーケンスを含む文字列によって配列のアイテムを取得したいですか? – splash58

答えて

2

それは参考

で行うことができます
$string = "['a'][1]['b'][1]"; 
// Maybe, not optimal, but it's not the point of the code 
preg_match_all('/\[\'?([^\]\']+)\'?\]/', $string, $steps); 

// "Root" of the array 
$p = &$array; 

foreach($steps[1] as $s) { 
    // Next step with current key 
    if (isset($p[$s]) && is_array($p)) $p = &$p[$s]; 
    else throw new Exception("No such item"); 
} 
// Target value 
$str = $p; 

demo

+0

ありがとう、それは私が必要としていたものです。 – Peon

+0

喜んで助けてください。がんばろう! – splash58