PHP 扁平化数组

Sheeraz Gul 2023年1月30日
  1. 在 PHP 中使用 RecursiveiteratoriteratorRecursivearrayiterator 操作展平数组
  2. 在 PHP 中使用 array_walk_recursive 展平多维数组
  3. 在 PHP 中使用 for 循环展平多维数组
  4. 在 PHP 中使用 while 循环展平多维数组
  5. 在 PHP 中使用 foreach 循环展平多维数组
PHP 扁平化数组

扁平化数组意味着将多维数组转换为一维数组。PHP 有不同的方法来展平数组,我们将在这里讨论它们。

在 PHP 中使用 RecursiveiteratoriteratorRecursivearrayiterator 操作展平数组

SPL 库具有用于展平多维数组的迭代器。我们使用了两个迭代器,RecursiveIteratorIteratorRecursiveArrayIterator,来操作展平数组。

<?php
$demo_array = array('a', 'b', 'c', 'd', array('e', 'f', 'g', 'h',  array('i', 'j', 'k'), 'l', 'm', 'n', 'o'), 'p', 'q', 'r', 's');
$iter_object = new RecursiveIteratorIterator(new RecursiveArrayIterator($demo_array));
$flatten_array= array();
foreach($iter_object as $value) {
  array_push($flatten_array,$value);
}
print_r($flatten_array);
?>

输出:

Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s ) 

该代码包含一个三层数组,该数组将被展平为一维数组。

在 PHP 中使用 array_walk_recursive 展平多维数组

内置函数 array_walk_recursive 可以与闭包函数一起使用,以展平 PHP 中的多维数组。

<?php
function flatten_array(array $demo_array) {
    $new_array = array();
    array_walk_recursive($demo_array, function($array) use (&$new_array) { $new_array[] = $array; });
    return $new_array;
}
$demo_array = array('a', 'b', 'c', 'd', array('e', 'f', 'g', 'h',  array('i', 'j', 'k'), 'l', 'm', 'n', 'o'), 'p', 'q', 'r', 's');

$new_array = flatten_array($demo_array);

print_r($new_array);
?>

输出:

Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s )

带有闭包函数的 array_walk_recursive 将给定的多维数组展平。

在 PHP 中使用 for 循环展平多维数组

我们可以使用 for 循环来展平多维数组;可能需要额外的内置函数。

<?php
function flatten_array($demo_array,$new_array) {
    for($i = 0; $i < count($demo_array); $i++) {
        if(is_array($demo_array[$i])) {
            $new_array = flatten_array($demo_array[$i], $new_array);
        }
        else {
            if(isset($demo_array[$i])) {
            $new_array[] = $demo_array[$i];
            }
        }
    }
    return $new_array;
}

$demo_array = array('a', 'b', 'c', 'd', array('e', 'f', 'g', 'h',  array('i', 'j', 'k'), 'l', 'm', 'n', 'o'), 'p', 'q', 'r', 's');
print_r(flatten_array($demo_array, array()));
?>

输出:

Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s )

上面的代码将通过在 for 循环的帮助下迭代给定数组来生成一个扁平数组。

在 PHP 中使用 while 循环展平多维数组

<?php
function flatten_array ($demo_array){
    $x = 0;
    while ($x < count ($demo_array)){
        while (is_array ($demo_array[$x])){
            if (!$demo_array[$x]){
                array_splice ($demo_array, $x, 1);
                --$x;
                break;
            }
            else{
                array_splice ($demo_array, $x, 1, $demo_array[$x]);
            }
        }
        ++$x;
    }
    return $demo_array;
}
$demo_array = array('a', 'b', 'c', 'd', array('e', 'f', 'g', 'h',  array('i', 'j', 'k'), 'l', 'm', 'n', 'o'), 'p', 'q', 'r', 's');
print_r(flatten_array($demo_array));
?>

输出:

Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s )

给定的数组在 while 循环和 array_splice 函数的帮助下变平,该函数用于删除数组的一部分并将其替换为其他内容。

在 PHP 中使用 foreach 循环展平多维数组

<?php
function flatten_array($demo_array) {
    if (!is_array($demo_array)) {
        // make sure the input is an array
        return array($demo_array);
    }

    $new_array = array();
    foreach ($demo_array as $value) {
        $new_array = array_merge($new_array, flatten_array($value));
    }

    return $new_array;
}

$demo_array = array('a', 'b', 'c', 'd', array('e', 'f', 'g', 'h',  array('i', 'j', 'k'), 'l', 'm', 'n', 'o'), 'p', 'q', 'r', 's');
print_r(flatten_array($demo_array));
?>

输出:

Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i [9] => j [10] => k [11] => l [12] => m [13] => n [14] => o [15] => p [16] => q [17] => r [18] => s )

给定的数组使用 foreach 循环和 array_merge() 函数变平,该函数将两个数组合二为一。

作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

相关文章 - PHP Array