0

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

$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 has left the building按照我们的预期打印,但在第二条回波线中,直到运行时我们才知道$meta我们要在结构中深入多少层。为了让我的梦想成真,我拼命尝试添加了$deep{$super_meta}命令。没有错误,但它会导致一个空字符串。该死。

随着我的梦想破灭,我希望有人可以再次接我并向我展示众所周知的“PHP之光”。

4

1 回答 1

1

您需要从整个数组 ( $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
    }
}
于 2013-02-05T15:28:15.400 回答