使用数组语法中的字符串访问多维数组


Accessing a multidimensional array with a string in array syntax

我有一个名为$row的数组,如下所示:

[multifield] => Array
(
    [pipelines_users] => Array
    (
        [users_id] => Array
        (
            [0] => 327
            [1] => 123
        )
    )
)

我想访问users_id数组,但只有字符串multifield[pipelines_users][users_id]

但是回显$row[$string]使用整个字符串作为键,并且不会分析方括号的数组表示法。

我试过:$row{$string}和其他几种不正确的语法,但没有运气。

字符串数组表示法将具有可变键,因此我无法在此处进行硬编码。

在不eval的情况下实现此目的的一种方法是拆分字符串并遍历键,检查它们的存在,逐渐缩小数组的范围。

$row = array("multifield" => Array
(
    "pipelines_users" => Array
    (
        "users_id" => Array
        (
            0 => 327
            ,1 => 123
        )
    )
));
$str = 'multifield[pipelines_users][users_id]';
$parts = preg_split('#[[']]+#',$str);//Convert string into array of keys: ('multifield','pipelines_users','users_id','')
$ret = $row;
foreach($parts as $key)
{
    if(isset($ret[$key])) $ret = $ret[$key];//When the key is found, we push $ret further down the array, for the next key search
}
var_dump($ret); //array(2) { [0]=> int(327) [1]=> int(123) }