在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)
是您在任意深度对每个非数组子级执行的任何操作也将是一个选项。很好的选择,忘了那个选项。另一个选择是-它有一个愚蠢的名字。