處理多維陣列是 PHP 開發常見需求。本文介紹兩種遍歷多維陣列的方法:巢狀 foreach 迴圈與遞迴函式,並提供程式碼範例供參考。
適用於已知固定層級(如二維)的陣列。外層迴圈取得鍵值,內層判斷值是否為陣列,若是則再次迴圈輸出。
$a = array(
'fruits' => array('a' => 'orange', 'b' => 'grape', 'c' => 'apple'),
'numbers' => array(1, 2, 3, 4, 5, 6),
'holes' => array('first', 5 => 'second', 'third')
);
foreach ($a as $key => $val) {
if (is_array($val)) {
foreach ($val as $k => $v) {
echo "Key: $k
Value: $v
";
}
}
}
適用於層級不固定、深度未知的陣列。函式 MulitarraytoSingle 透過遞迴將所有值收集到一維陣列 $temp 中。
function MulitarraytoSingle($array) {
static $temp = array(); // 使用 static 保持跨呼叫狀態
if (is_array($array)) {
foreach ($array as $key => $value) {
if (is_array($value)) {
MulitarraytoSingle($value);
} else {
$temp[] = $value;
}
}
}
return $temp;
}
// 使用範例
$multi = array(
'level1' => array('a', 'b', array('c', 'd')),
'level2' => array('e', 'f')
);
$result = MulitarraytoSingle($multi);
print_r($result);
$temp 未宣告為 static,導致遞迴時無法累積結果;上方已修正。array_walk_recursive 更簡潔地達成相同目的:array_walk_recursive($array, function($v) use (&$out) { $out[] = $v; });RecursiveIteratorIterator 搭配 RecursiveArrayIterator。掌握這兩種遍歷方式,能靈活應對不同結構的多維陣列處理需求。