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