php多维数组合并的例子

发布时间:2020-07-12编辑:脚本学堂
本文介绍了php多维数组合并的方法与例子,把多维数组降成一维数组,使用 array_merge() 函数进行合并,递归合并多维数组,需要的朋友参考下。

php多维数组合并

首先,array_merge() 函数不能合并多维数组。
一、降维合并后升维
比较推荐第二种写法。
1. 把多维数组降成一维数组
 

复制代码 代码示例:

/**
 * 多维to一维
 * @param $array
 * @param string $delimiter
 * @param string $key
 * @return array
 */
function multi2one ($array, $delimiter = '->', $key = '') {
    $data = [];
    if ( !is_array($array) ) {
        return $data;
    }
    foreach ( $array as $k => $v ) {
        $newKey = trim($key.$delimiter.$k, $delimiter);
        if ( is_array($v) ) {
            $data = array_merge($data, multi2one($v, $delimiter, $newKey));
        } else {
            $data[$newKey] = $v;
        }
    }
    return $data;
}
//降维前
$array = [
    'a' => [
        'b' => 1,
        'c' => [
            'd' => 2,
            'e' => 3
        ]
    ],
    'f' => 4
]

//降维后
$array = [
    'a->b' => 1,
    'a->c->d' => 2,
    'a->c->e' => 3,
    'f' => 4
]
 

2、使用 array_merge() 函数进行合并
3、反向将数组升维
 
二. 递归合并多维数组
 

复制代码 代码示例:
/**
 * 多维数组合并(支持多数组)
 * @return array
 */
function array_merge_multi ()
{
    $args = func_get_args();
    $array = array();
    foreach ( $args as $arg ) {
        if ( is_array($arg) ) {
            foreach ( $arg as $k => $v ) {
                if ( is_array($v) ) {
                    $array[$k] = isset($array[$k]) ? $array[$k] : array();
                    $array[$k] = array_merge_multi($array[$k], $v);
                } else {
                    $array[$k] = $v;
                }
            }
        }
    }
    return $array;
}