我试图找出如何将索引数组的值用作另一个数组的路径。我将字符串爆炸为数组,并根据该数组中的所有值,我在另一个数组中查找值。
示例:
$haystack['my']['string']['is']['nested'] = 'Hello';
$var = 'my@string@is@nested';
$items = explode('@', $var);
// .. echo $haystack[... items..?]
值的数量可能会有所不同,因此不能只选择$haystack[$items[0][$items[1][$items[2][$items[3]]
。
有什么建议吗?
答案 0 :(得分:2)
您可以使用循环来抓取每个后续嵌套数组。即:
$haystack['my']['string']['is']['nested'] = 'Hello';
$var = 'my@string@is@nested';
$items = explode('@', $var);
$val = $haystack;
foreach($items as $key){
$val = $val[$key];
}
echo $val;
请注意,这不会检查,您可能希望检查$val[$key]
是否存在。
答案 1 :(得分:2)
您可以使用循环 -
$haystack['my']['string']['is']['nested'] = 'Hello';
$var = 'my@string@is@nested';
$items = explode('@', $var);
$temp = $haystack;
foreach($items as $v) {
$temp = $temp[$v]; // Store the current array value
}
echo $temp;
答案 2 :(得分:2)
或者您可以使用递归函数:
function extractValue($array, $keys)
{
return empty($keys) ? $array : extractValue($array[array_shift($keys)], $keys) ;
}
$haystack = array('my' => array('string' => array('is' => array('nested' => 'hello'))));
echo extractValue($haystack, explode('@', 'my@string@is@nested'));