我有一个非常大的数组,我需要解析,但请求会根据启用/禁用的参数而改变。
例如:
$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 :(得分: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;