php - 从嵌套关联数组中获取单个值
问题描述
对于我用 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[...]
。
这个答案似乎知道搜索它的价值。
由于我不完全理解这个答案,我不确定这是否是正确的方法。
是否有类似的简单方法可以从构建该数组中获得相反的结果?
解决方案
经过一番思考,我找到了一个足够体面的解决方案,它适用于我(希望其他人):
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
如果未找到任何指定的键。
推荐阅读
- docker - 运行 docker 文件后 curl 命令不起作用
- c++ - Parallel-hashmap:确定 C++ 版本
- shell - 尝试将命令存储在 shell 变量中,但它出错了
- javascript - JS 获取组件位置,既没有 GetElementById 也没有 getBoundingClientRect
- chart.js - 数据集中具有空数据点的chart.js
- sql-server - 用特定字符替换特殊字符的 T-SQL 查询
- powerapps - Power apps 级联下拉菜单
- powershell - 如何将字符串添加到powershell的输出中
- typescript - 有没有办法从 tsconfig.json 指定 tsc 的 --build 标志?
- python - 如何从 pandas python 中的数据框中重新添加已删除的列?