Php 使用动态下标设置多维数组

Php 使用动态下标设置多维数组,php,Php,我想找到一种在多维数组中用动态下标设置值的方法。让我举一个非常简单的例子: $deep['foo'] = array(); $deep['foo']['bar'] = "Elvis has left the building"; $meta = array( 'foo','bar' ); $super_meta = "[{$meta[0]}][{$meta[1]}]"; echo "\nWhere is Elvis? " . $deep[$meta[0]][$meta[1]] . ". Are

我想找到一种在多维数组中用动态下标设置值的方法。让我举一个非常简单的例子:

$deep['foo'] = array();
$deep['foo']['bar'] = "Elvis has left the building";
$meta = array( 'foo','bar' );
$super_meta = "[{$meta[0]}][{$meta[1]}]";
echo "\nWhere is Elvis? " . $deep[$meta[0]][$meta[1]] . ". Are we sure?\n";
echo "\nWhere is Elvis? " . $deep{$super_meta} . ".\n\n";
在本例中,第一条回音线打印出我们预期的Elvis已离开建筑,但在第二条回音线中,直到运行时,我们才知道我们将进入
$meta
结构的多少层。为了实现我的梦想,我添加了
$deep{$super\u meta}
命令。没有错误,但结果为空字符串。该死


我的梦想破灭了,我希望有人能再次把我抱起来,让我看到众所周知的“PHP之光”

您需要从整个数组(
$deep
)开始,然后迭代
$meta
中的元素,并为每个元素提取一个更深的嵌套数组。试试这个:

$result = $deep;
foreach ($meta as $elem) {
    $result = $result[$elem];
}
echo $result;
// outputs "Elvis has left the building"
请注意,这不包括任何错误检查。如果任何元素不存在,它将返回一个大错误。您可以非常轻松地处理此问题:

$result = $deep;
foreach ($meta as $elem) {
    if (array_key_exists($elem, $result)) {
        $result = $result[$elem];
    } else {
        // Handle error in some way, maybe throw an exception
    }
}

如果我理解这一点,您希望能够将
$meta
设置为包含任意数量元素的数组,并从
$deep
中提取值,该值遵循
$meta
中定义的“路径”,对吗?@leftclickben,对,对。是的,我感觉有人要建议递归。我的左脑发生了一次悲惨的事故,每当使用递归这个词时,我都会退缩,但这对我来说应该是可行的。你不需要递归,只要按照我的回答进行迭代就行了。通常,如果您预先知道需要做某事的次数,那么使用迭代。如果您不知道有多少次,但您知道结束条件是什么,请使用递归。在本例中,您的输入是
$meta
数组,这意味着您知道要重复多少次,所以请使用迭代。关于它是一个“单数语句”,我假设你指的是一个单行程序,将我的代码包装在一个函数中(在我指出的地方抛出一个异常),你有一个单行程序,可以包装在
try
-
catch
块中。