从嵌套的关联数组中获取单个值

时间:2018-08-11 15:37:33

标签: php multidimensional-array associative-array

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

设置文件的构建类似于常规的ini文件

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

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

感谢this accepted answer,到目前为止,我可以将标头递归拆分为递归数组。到目前为止,一切都很好。

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

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

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

This answer似乎知道要搜索什么值。

由于我不完全了解this answer,因此我不确定这是否是正确的方法。

是否有类似的简单方法可以从building that array中获得相反的结果?

1 个答案:

答案 0 :(得分:0)

经过深思熟虑后,我找到了一个足够不错的解决方案,该解决方案对我(并希望对其他人)有效:

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。 / p>

相关问题