使用PHP将数组值转换为嵌套数组

3

我正在尝试弄清楚如何将索引数组的值作为另一个数组的路径。 我将字符串拆分为数组,并基于该数组中的所有值在另一个数组中查找值。

例如:

$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]]]。有什么建议吗?
3个回答

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]是否存在。
示例在此处:http://codepad.org/5ei9xS91

感谢您的帮助。运行得很好,解决方案简洁明了。@b0s3只是稍微早了一点。只能接受一个答案。+1 - Ben Fransen
@ben 不,第一个回答是由Jim发布的。 - Narendrasingh Sisodia
奇怪,我的浏览器告诉我不同的事情 ;) 不过还是谢谢 :) - Ben Fransen

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;

DEMO


谢谢你的帮助。运行得很好。+1并接受。 - Ben Fransen

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'));

感谢您抽出时间回复。现在已经提供了一个可行的解决方案,而您的也同样有效。祝您拥有美好的一天。+1 - Ben Fransen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接