Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中访问嵌套数组而不使用许多循环_Php_Arrays - Fatal编程技术网

在PHP中访问嵌套数组而不使用许多循环

在PHP中访问嵌套数组而不使用许多循环,php,arrays,Php,Arrays,考虑以下几点: $dropdown = array ( "unitofmeasure" => array ( "m" => "meters", "ft" => "feet" ), "facing_direction" => array ( "0" => array ("West","North-West","North","North-East","East","South

考虑以下几点:

$dropdown = array (
    "unitofmeasure" => array (
        "m"     => "meters",
        "ft"    => "feet"
    ),
    "facing_direction" => array (
        "0"     => array ("West","North-West","North","North-East","East","South-East"),
        "1"     => array("South","South-West")
    )
    .... 
)
假设有n个子数组,而不仅仅是上面显示的两个

迭代解决方案:

foreach($dropdown as $key => $val) {
    foreach($val as $k => $v) { 
        foreach($v as $id => $value) {
           //manipulate values here
        }
    }
}
我的问题是:

PHP中没有更优雅的解决方案吗?
例如,
foreach($dropdown->children()->children()…)


我知道有一些半相似的问题,但它们略有不同,答案一般

是的,我个人倾向于使用闭包(如果您使用的是5.3以上的PHP)

显然,如果你喜欢弄脏你的手,你也可以使用递归

我想举一个例子:

$array = [ 0 => [0 => [ 0 => 1 ...]]];

$manipulated_array = [];

array_walk_recursive($array, function($value) use (&$manipulated_array)
{
  // do whatever you wish here
});
foreach()只需要一个数组,所以如果只需要迭代其中一个深度嵌套的数组,就可以很容易地

foreach($arr['level1']['level2'][...]['levelGazillion'] as ...)

我倾向于在以下情况下使用递归:

function modify_array(&$arr)
{
    if (is_array(arr)) {
        foreach($arr as &$val) {
            modify_array($val);
        }
    } else {
        modify_value($arr);
    }
}

其中,
modify_value(&$val)
是您在任意深度对每个非数组子级执行的任何操作

也将是一个选项。很好的选择,忘了那个选项。另一个选择是-它有一个愚蠢的名字。