我正在尝试编写一个循环,该循环将遍历任何深度的数组,并将键/值对分配给变量。问题是该函数是递归的,所以当我最终必须返回变量时,它会杀死循环并且我只留下第一次迭代。这是代码。有什么帮助吗?
function recursive($a, $l = 1){
if(is_array($a)){
foreach($a as $k => $v){
if(is_array($v)){
recursive($v, $l + 1);
}else{
$keys[] = $k;
$values[] = $v;
}
}
}
return array($keys, $values);
}
答案 0 :(得分:2)
使用PHP的 array_walk_recursive 函数:
$data = array('a' => 3, 'b' => array('d' => 5)); //this is your array of any depth
$keys = array();
$values = array();
array_walk_recursive($data, function($v, $k) use (&$keys, &$values) {
$keys[] = $k;
$values[] = $v;
});
print_r($keys);
print_r($values);
答案 1 :(得分:0)
一个选项是do-while
循环中的调用函数,如果函数找到匹配,则删除它。
$copy = $array;
do{
$find = false;
$result = recursive($copy, $find);
}while($find)
function recursive(&$a, &$find, $l = 1){
if(is_array($a)){
foreach($a as $k => $v){
if(is_array($v)){
recursive($v, $find, $l + 1);
}else{
$keys[] = $k;
$values[] = $v;
unset($a[$k]);
$find = true;
}
}
}
return array($keys, $values);
}