可变水平的多维数组,以实现价值平坦化。 PHP的数组?

时间:2017-10-19 13:35:38

标签: php arrays flatten

我正在寻找一个解扁平可变多维数组的解决方案,将最后一个可用数组中的所有值展平为单个Array[](包含多维数组中每个最后一个数组的数据集) )。

感谢任何帮助!

与其他问题不同

因为结尾结果应该是包含所有Arrays的集合:

array(
    'title' => xx,
    'id' => xx
)

列在不同的多维数组中。 不同的项目都已修复keystitleid

示例基本数组

$data = array(
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        array(
            array(
                'title' => xx,
                'id' => xx
            ),
            array(
                'title' => xx
                'id' => xx
            )
        )
    ),
    array(
        array(
            array(
                array(
                    'title' => xx,
                    'id' => xx
                ),
                array(
                    'title' => xx,
                    'id' => xx
                ),
                array(
                    'title' => xx,
                    'id' => xx
                )
            )
        ),
        array(
            'title' => xx,
            'id' => xx
        ),
        array(
            array(
                array(
                    array(
                        'title' => xx,
                        'id' => xx
                    )
                )
            )
        )
    )
);

应该平放到

 $data = array(
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        'title' => xx,
        'id' => xx
    ),
    array(
        'title' => xx,
        'id' => xx
    )
);

1 个答案:

答案 0 :(得分:1)

function flatten_array(&$data) {

    foreach ($data as $index => &$item) {

        if(has_array_child($item)) {
            unset($data[$index]);
            flatten_array($item);
            $data = array_merge($data, $item);
        }

    }

}

function has_array_child($item) {
    foreach($item as $child) {
        if(is_array($child)) {
            return TRUE;
        }
    }

    return FALSE;
}

flatten_array($data);

print_r($data);