对于我用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中获得相反的结果?
答案 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>