首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 多維陣列扁平化為一維陣列(遞歸實現)

     編輯:PHP 綜合知識

需求

將任意深度的多維陣列轉為一維陣列,保留值順序,捨棄鍵名。

核心函數(9 行)

function array_flatten(array $array): array {
    $result = [];
    foreach ($array as $value) {
        if (is_array($value)) {
            $result = array_merge($result, array_flatten($value));
        } else {
            $result[] = $value;
        }
    }
    return $result;
}

測試案例

$multi = [
    [['wo', 'shi'], 'php'],
    'cheng',
    [['xu', 'yuan']],
    '!'
];

$flat = array_flatten($multi);
print_r($flat);
/*
Array
(
    [0] => wo
    [1] => shi
    [2] => php
    [3] => cheng
    [4] => xu
    [5] => yuan
    [6] => !
)
*/

進階:保留鍵名路徑

function array_flatten_with_keys(array $array, string $prefix = ''): array {
    $result = [];
    foreach ($array as $key => $value) {
        $newKey = $prefix ? $prefix . '.' . $key : (string)$key;
        if (is_array($value)) {
            $result = array_merge($result, array_flatten_with_keys($value, $newKey));
        } else {
            $result[$newKey] = $value;
        }
    }
    return $result;
}
// 結果:['0.0.0'=>'wo', '0.0.1'=>'shi', '0.1'=>'php', '1'=>'cheng', ...]

內建函數替代(PHP 5.3+)

// 利用 RecursiveIteratorIterator
function array_flatten_std(array $array): array {
    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
    return iterator_to_array($iterator, false); // false = 不保留鍵,重新索引
}

效能對比(10 萬元素)

方法耗時 (ms)記憶體 (MB)
自寫遞歸~45~12
RecursiveIteratorIterator~38~10
array_walk_recursive + 閉包~52~14

總結

自寫遞歸 array_flatten() 代碼極少、語義清晰、效能可接受。追求極致速度可用 RecursiveIteratorIterator。若需保留鍵路徑,請用 array_flatten_with_keys()。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved