HOWTO · PHP
PHP 扁平化陣列
本教程演示瞭如何在 PHP 中展平多維陣列。
本頁內容
扁平化陣列意味著將多維陣列轉換為一維陣列。PHP 有不同的方法來展平陣列,我們將在這裡討論它們。
在 PHP 中使用 Recursiveiteratoriterator 和 Recursivearrayiterator 操作展平陣列
SPL 庫具有用於展平多維陣列的迭代器。我們使用了兩個迭代器,RecursiveIteratorIterator 和 RecursiveArrayIterator,來操作展平陣列。
<?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() 函式變平,該函式將兩個陣列合二為一。