将多维PHP数组转换为二维数组


Turn a multidimensional PHP array into a bidimensional array

我正在努力实现我天真地认为很简单的事情:扁平化一个多维数组(它可能有很多嵌套级别(,但结果仍然有数组。理想情况下,我正在寻找一个可以在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);
}