我正在努力实现我天真地认为很简单的事情:扁平化一个多维数组(它可能有很多嵌套级别(,但结果仍然有数组。理想情况下,我正在寻找一个可以在10多个嵌套级别中迭代的函数,并且可以处理不同的键集(不一定总是相同的(。
简而言之,转向这个:
Array
(
[0] => Array
(
[0] => Array
(
[index] => -1
[qty] => 77
[id] => 7
)
[1] => Array
(
[index] => -1
[qty] => 83
[id] => 8
)
)
[1] => Array
(
[0] => Array
(
[index] => -1
[qty] => 75
[id] => 13
)
[1] => Array
(
[index] => -1
[qty] => 60
[id] => 14
[msr] => g
)
)
[2] => Array
(
[index] => -1
[qty] => 10
[id] => 12
)
)
进入:
Array
(
[0] => Array
(
[index] => -1
[qty] => 77
[id] => 7
)
[1] => Array
(
[index] => -1
[qty] => 83
[id] => 8
)
[2] => Array
(
[index] => -1
[qty] => 75
[id] => 13
)
[3] => Array
(
[index] => -1
[qty] => 60
[id] => 14
[msr] => g
)
[4] => Array
(
[index] => -1
[qty] => 10
[id] => 12
)
)
这就是我所拥有和认为的,但我最终得到了一个没有密钥信息的平面数组(如果我想要密钥,每次迭代都会覆盖以前的值,我最终只得到它们的最后一个数组(:
function flatten_multi_array(array $array){
$ret_array = array();
foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $value) {
$ret_array[] = $value;
}
return $ret_array;
}
function dig($source, &$out){
foreach ($source as $k => $v){
if (isset($v["index"]){
$out[] = $v;
} else {
dig($v, $out);
}
}
}
就是这样。
用法:
$out = array();
$source = array(); // your magic nested array
dig($source, $out);
现在CCD_ 1已经满足了您的需求。
如果您仍在寻找RecursiveIteratorIterator
方法,请参阅以下内容:
foreach(new RecursiveIteratorIterator(new ParentIterator(new RecursiveArrayIterator($array)), RecursiveIteratorIterator::SELF_FIRST) as $value) {
if (isset($value['index']))
$ret_array[] = $value;
}
这应该在你的函数中完成。请参阅演示。
相关:数组内所有索引的快速递归搜索
像这样未经测试的代码可能。。。
$outArray = array();
foreach($originalArray as $nestedArray){
foreach($nestedArray as $innerArray){
$outArray[] = $innerArray;
}
}
print_r($outArray);
我看到这只是一个答案。好吧,我想我会贡献我的解决方案,因为我做了。:P
$newArray = array();
function isMulti($k,$v){
global $newArray;
if(is_array($v)){
foreach($v as $k2 => $v2){
if(!is_array($v2)){
$newArray[] = $v;
break;
}else{
isMulti($k2,$v2);
}
}
}
}
foreach($arrayInQuestion as $k => $v){
isMulti($k,$v);
}