有没有办法在PHP中使用变量中的索引序列索引数组?

时间:2017-05-06 10:01:06

标签: php arrays

有: 一个数组$ a, 变量$indexes = "[\"level1\"][\"level2\"][\"level3\"]";

有没有办法访问$a["level1"]["level2"]["level3"]

情况是此函数将处理的索引数可能会更改。所以这就是索引变量的原因。

2 个答案:

答案 0 :(得分:0)

希望这个简单的解决方案可以帮助你。

Try this code snippet here

<?php

ini_set('display_errors', 1);

//Here we are retrieving levels
$indexes = '["level1"]["level2"]["level3"]';
preg_match_all('/(?<=")[\w]+(?=")/', $indexes,$matches);
$levels=$matches[0];

//this is the sample array
$array=$tempArray=array(
    "level1"=>array(
        "level2"=>array(
            "level3"=>"someValue"
        )
    )
);
//here we are iterating over levels to get desired output.

foreach($levels as $level)
{
    $tempArray=$tempArray[$level];
}
print_r($tempArray);

答案 1 :(得分:0)

首先,不要将string用于$indexes,请使用array

对于简单检索,您可以使用array_reduce

$result = array_reduce($indexes, function ($array, $index) {
    return isset($array[$index]) ? $array[$index] : null;
}, $array);

请注意,当数组中没有此类索引时,值默认为null

这是working demo

如果你想要一些更复杂的东西,请查看a library I wrote some time ago的情况,当你还需要向数组添加项目并检查是否存在时:

var_dump(isset($array[['foo', 'bar']]));

var_dump($array[['foo', 'bar']]);

$array[['foo', 'bar']] = 'baz';

unset($array[['foo', 'bar']]);

它们都是存在检查,检索元素,编写元素和删除元素的有效用法示例。