从自定义深度的多维数组中提取项目

Extract item from multi-dimensional array from custom depth

我有这样的多维数组:

$obj = array(
    "a" => array(
        "aa" => array(
            "aaa" => 1   
        ),
        "bb" => 2,
    ),
    "b" => array(
        "ba" => 3,
        "bb" => 4,
    ),
    "c" => array(
        "ca" => 5,
        "cb" => 6,
    ),    
);

我想不出最巧妙的方法,例如自定义深度函数,使用函数参数(或键名数组)在特定位置提取项目。例如:

echo $obj[someFunc("a", "aa", "aaa")];

...应该return 1.

print_r($obj[someFunc("a")]);

... 应该 return:

Array
(
    [aa] => Array
        (
            [aaa] => 1
        )

    [bb] => 2
)

使用 php7 功能实现此目的的最佳方法是什么?

自 PHP 5.6 以来,[“可变参数函数”][1] 已经存在。这些为我们提供了一种很好的简单易读的方法来收集调用函数时使用的参数到一个数组中。例如:

function getValue(...$parts) {
    var_dump($parts);
}

getValue('test', 'part');

将输出:

array(2) {
  [0]=>
  string(4) "test"
  [1]=>
  string(4) "part"
}

在使用内置函数获取参数之前,这一切都是可能的,但这样可读性更好。

您也可以对参数类型更明确一些,但如果需要,我会留给您自己解决。

您的下一个主要挑战是遍历参数。这样的东西会产生你想要的价值。

function getValue(...$parts) {
    $returnValue = $obj;

    foreach ($parts as $part) {
        $returnValue = $obj[$part];
    }

    return $returnValue;
}

但是,这是相当粗糙的代码,当您尝试调用它来访问不存在的部分时会出错。玩一玩并修复这些位。 [1]: https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list