将params添加到数组请求

时间:2017-11-17 10:56:01

标签: php arrays

我有一个非常大的数组,我需要解析,但请求会根据启用/禁用的参数而改变。

例如:

$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);

1 个答案:

答案 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;

demo