內建 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() 重建索引或自行修改邏輯。array_walk_recursive 疊代收集值,再一次 implode,避免多次字串拼接開銷。function deepImplode($glue, $array) {
$result = array();
array_walk_recursive($array, function($v) use (&$result) { $result[] = $v; });
return implode($glue, $result);
}
此寫法支援任意深度、自動忽略鍵名、程式碼更簡潔。