【问题标题】:Get a single value from a nested associative array从嵌套关联数组中获取单个值
【发布时间】:2018-08-11 15:37:33
【问题描述】:

对于我用 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 得到相反的结果?

【问题讨论】:

  • 你可能想看看 parse_ini_file php.net/manual/en/function.parse-ini-file.php
  • 从我的设置文件构建数组已经完成,并且在超速时的工作方式类似于“parse_ini_file”,甚至已经包含了小节。我的问题是,当脚本不知道可以定义什么时,如何再次获取特定值。也许更简单:我如何将 "a.b.c.d" 转换为 $var["a"]["b"]["c"]["d"] 以获取存储在那里的值。
  • php 变量无法启动 $@
  • 没错。事实上,这在我所知道的任何脚本语言或配置文件占位符中都没有变量,这使得将它与 str_replace(“$@R”, $some_var) 一起使用非常容易读入并转换 [...] 中的内容,然后使用剧本。然后我需要做的就是转换”a.b.c.d”,这样我就可以将它与内部脚本变量(例如:$var[“a”][“b”][“c”][“d”])一起使用来读取取出其中的值以替换内容文件行中的占位符。

标签: php multidimensional-array associative-array


【解决方案1】:

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

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(如果未找到任何指定的键)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2013-10-11
    • 2016-03-14
    • 2021-12-14
    • 1970-01-01
    • 2015-01-25
    相关资源
    最近更新 更多