首页 > 解决方案 > 从嵌套关联数组中获取单个值

问题描述

对于我用 PHP 编写的设置脚本(用于 CLI,而不是 Web),我使用设置文件以及其他“内容”文件。

设置文件像普通的 ini 文件一样构建

[header.subheader.moreheaders...]
keyA = value
keyB = value1|value2|...

“header.subheader.moreheaders...”和“keyX”将形成一个嵌套关联数组,其中“value”作为字符串或“value1|value2|...”作为简单数组(0-...)。

多亏了这个公认的答案,我到目前为止可以将标头递归地拆分为递归数组。到目前为止,一切都很好。

但是,由于内容文件应包含对这些变量的引用,我希望能够从具有字符串占位符的多维数组中读取单个值,例如$@R[header.subheader.moreheaders.key]$@R[header.subheader.moreheaders.key.0]取决于它们是字符串还是数组。

在脚本中,$@R[header.subheader.moreheaders.key.0]应该转换成$SettingsVar[header][subheader][moreheaders][key][0]返回适当的值。

脚本和内容文件都不知道设置文件中的内容。脚本只知道一般结构和占位符$@R[...]

这个答案似乎知道搜索它的价值。

由于我不完全理解这个答案,我不确定这是否是正确的方法。

是否有类似的简单方法可以从构建该数组中获得相反的结果?

标签: phpmultidimensional-arrayassociative-array

解决方案


经过一番思考,我找到了一个足够体面的解决方案,它适用于我(希望其他人):

function GetNestedValue($aNestedKeys, $aNestedArray)
{
    $vValue = $aNestedArray;
    for($i = 0; $i < count($aNestedKeys); $i++)
    {
        if(array_key_exists($aNestedKeys[$i], $vValue))
        {
            $vValue = $vValue[$aNestedKeys[$i]];
        }
        else
        {
            $vValue = null;
            break;
        }
    }

    return $vValue;
}

根据$aNestedKeys包含的内容,它将返回来自 的子数组$aNestedArray、其中的单个值,或者null如果未找到任何指定的键。


推荐阅读