二維陣列在 PHP 開發中極為常見,例如資料庫查詢結果、API 回傳資料、表單批次處理等。本文介紹三種遍歷二維陣列的實用技巧,幫助你靈活應對不同資料結構。
適用於「不確定第二層是否為陣列」的混合結構:
<?php
$book = [
'linux服務器配置與管理',
'team' => ['lk', 'ok']
];
foreach ($book as $key => $val) {
if (is_array($val)) {
foreach ($val as $value) {
echo $value . '<br>';
}
} else {
echo "{$key} => {$val}<br>";
}
}
/*
輸出:
0 => linux服務器配置與管理
lk
ok
*/
?>
適用於資料庫查詢結果直接輸出表格:
<?php
// 假設 $row_mark 為資料庫查詢結果二維陣列
$row_mark = [
['id' => 1, 'name' => '張三', 'age' => 25],
['id' => 2, 'name' => '李四', 'age' => 30],
];
foreach ($row_mark as $row) {
echo "<tr>";
foreach ($row as $key => $value) {
echo "<td width='80'>{$value}</td>";
}
echo "</tr>";
}
?>
適用於結構固定的選單、導航、設定陣列:
<?php
$menu = [
['name' => '網站設定', 'url' => '?action=config&do=config'],
['name' => '驗證碼設定', 'url' => '?action=config&do=seccode'],
['name' => '模板管理', 'url' => '?action=config&do=tpl'],
['name' => '帳號管理', 'url' => '?action=admin&do=list'],
['name' => '新增帳號', 'url' => '?action=admin&do=add'],
];
foreach ($menu as $item) {
echo "name: {$item['name']}<br>";
// 同時取得 URL:$item['url']
}
?>
PHP 5.5+ 可用 array_column() 快速取得某欄位所有值:
<?php
$names = array_column($menu, 'name');
$urls = array_column($menu, 'url');
// $names = ['網站設定', '驗證碼設定', ...]
?>
| 函數/結構 | 適用場景 | 特點 |
|---|---|---|
| foreach | 最通用,支援關聯/索引陣列 | 語法簡潔,可直接取得 key/value |
| for + count | 需控制索引、反向遍歷 | 效能略高,但寫法較繁瑣 |
| while + list + each | 舊式代碼維護 | PHP 7.2+ 棄用 each(),不建議新專案使用 |
| array_walk / array_map | 需對每個元素套用函數 | 函數式風格,適合資料轉換 |
array_column、array_map 避免巢狀迴圈is_array() 或 empty() 判斷防止警告htmlspecialchars() 防 XSS