PHP多维数组转为一维数组的方法实例

1. 使用foreach

function array_foreach($arr) {
    static $tmp = array();
    if (!is_array ($arr)) {
        return false;
    }
    foreach ($arr as $val ) {
        if (is_array ($val)) {
            array_foreach($val);
        }
        else {
            $tmp[]=$val;
        }
    }
    return $tmp;
}

// 调用例子
$arr = array(1,2=>array(3,4=>array(5,6)),7);
print_r(array_foreach($arr)); // Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 6 [4] => 7 )

2. 使用for循环,只能遍历数字下标的数组

function array_for($arr) {
    static $tmp = array();
    for($i=0; $i<count($arr); $i++) {
        if(is_array($arr[$i])) {
            array_for($arr[$i]);
        } else {
            $tmp[]=$arr[$i];
        }
    }
    return $tmp;
}
// 调用例子
$arr = array(1,array(3,array(5,6)),7);
print_r(array_for($arr)); // Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 6 [4] => 7 )

3. 使用while

function array_while($arr) {
    // 将数值第一元素作为容器,作地址赋值。
    $ar_room = &$arr[key($arr)];
    // 第一容器不是数组进去转呀
    if (!is_array($ar_room)) {
        // 转为成数组
        $ar_room = array($ar_room);
    }
    // 指针下移
    next($arr);
    // 遍历
    while (list($k, $v) = each($arr)) {
        // 是数组就递归深挖,不是就转成数组
        $v = is_array($v) ? call_user_func(__FUNCTION__, $v) : array($v);
        // 递归合并
        $ar_room = array_merge_recursive($ar_room, $v);
        // 释放当前下标的数组元素
        unset($arr[$k]);
    }
    return $ar_room;
}

$arr = array(1, 2, 3 => array(1, 2, 'ar' => array(1, 2 => array('a', 'b'))), array('ar' => array(3, 4)));
print_r(array_while($arr)); // Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 1 [5] => a [6] => b [7] => 3 [8] => 4 )
原文地址:https://www.cnblogs.com/chenjiacheng/p/6522616.html