【问题标题】:Select elements from multi-dimensional array, using string (PHP) [duplicate]使用字符串(PHP)从多维数组中选择元素
【发布时间】:2013-12-06 12:33:42
【问题描述】:

我在 PHP 中有一个多维数组

$somearray = array(
    'item1' => array(
        'subitem1' => 'Some value',
        'subitem2' => 'Some other value',
        'subitem3'  => array(
            'subsubitem' => 'A sub value'
        )
    ),
    'item2' => 'a different value'
);

然后我有一个字符串 map 代表我要选择的值:

"item1/subitem3/subsubitem"

如何将数组的字符串 map 转换为:

$wanted_value = $somearray['item1']['subitem3']['subsubitem'];

但请记住,数组可以是任意数量的深度。

【问题讨论】:

  • explode你的路径,然后用递归函数遍历数组。
  • 我认为它不应该是递归的
  • 只是为了好玩:eval('$wanted_value = $somearray["' . str_replace("/",'"]["',$map) . '"];'); 完成!但说真的,使用@TobSpr 的方法。 =)
  • 好吧,这至少很有创意:P

标签: php arrays string multidimensional-array explode


【解决方案1】:

另一种方式(也应该检查以确保密钥存在):

$path   = explode("/", "item1/subitem3/subsubitem");
$result = $somearray;

foreach($path as $k) {
    $result = $result[$k];
}
echo $result;

【讨论】:

  • 我实际上在@TobSpr 上使用了它,因为我发现在此过程中使用if (isset($result[$k])) 添加一些基本的健全性检查更容易,但两种解决方案都运行良好。谢谢大家。
【解决方案2】:

这应该可行:

$parts = explode("/", $map);

$currentData = $somearray;
for ($i = 0; $i < count($parts); $i++) {
    $currentData = $currentData[$parts[$i]];
}

$result = $currentData;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多