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

PHP 多維陣列轉字串:支援二維/三維的自訂 implodex 函式

     編輯:PHP 綜合知識

需求場景

內建 implode() 僅支援一維陣列。當需要將二維或三維陣列「扁平化」為單一字串(如匯出 CSV、記錄日誌、快速比對資料)時,必須自行實作遞迴或疊代邏輯。本函式 implodex() 即為此而生,支援最多三維陣列,並可自訂層級分隔符。

函式原始碼

<?php
/**
 * 多維陣列轉字串(支援最多三維)
 *
 * @param string $glue       同層元素間的分隔符
 * @param array  $array      目標陣列
 * @param string $separator  層級間的分隔符(預設同 $glue)
 * @return string            扁平化後的字串
 */
function implodex($glue, $array, $separator = '')
{
    if (!is_array($array)) {
        return $array;
    }

    $string = array();
    $count  = 0;

    foreach ($array as $key => $val) {
        // 遇到子陣列遞迴處理(僅再深入一層,故最多支援三維)
        if (is_array($val)) {
            $val = implode($glue, $val);
        }

        // 第一個元素不加 $glue 前綴
        if ($count === 0) {
            $string[] = "{$val}";
        } else {
            $string[] = "{$glue}{$val}";
        }
        $count++;
    }

    if (empty($separator)) {
        $separator = $glue;
    }

    return implode($separator, $string);
}
?>

使用範例

<?php
$data = array(
    array('A', 'B', 'C'),
    array('D', 'E'),
    array('F')
);

echo implodex('|', $data, ';');
// 輸出:A|B|C;D|E;F
?>

設計考量與限制

  • 非遞迴完整實作:僅處理「第一層為陣列、第二層為純量或一維陣列」的結構。若需任意深度,請改用遞迴版本。
  • 鍵名忽略:僅處理值,鍵名會被捨棄。若需保留鍵名,請先用 array_values() 重建索引或自行修改邏輯。
  • 效能:對大型陣列(>10 萬元素)建議改用 array_walk_recursive 疊代收集值,再一次 implode,避免多次字串拼接開銷。

進階替代方案(PHP 5.4+)

function deepImplode($glue, $array) {
    $result = array();
    array_walk_recursive($array, function($v) use (&$result) { $result[] = $v; });
    return implode($glue, $result);
}

此寫法支援任意深度、自動忽略鍵名、程式碼更簡潔。

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