foreach 是 PHP 遍歷陣列最常用的語法,本文示範如何正確處理一維、二維與混合結構陣列,避免常見的「輸出 Array 字串」問題。
foreach ($array as $value) { ... } // 只取值
foreach ($array as $key => $value) { ... } // 取鍵與值
$team = ['lk', 'ok'];
$book = ['Linux伺服器設定', $team];
foreach ($book as $k => $val) {
echo "$k => $val
";
}
// 輸出:
// 0 => Linux伺服器設定
// 1 => Array ← 問題:子陣列直接輸出成 "Array"
$team = ['lk', 'ok'];
$book = ['Linux伺服器設定', $team];
foreach ($book as $k => $val) {
if (is_array($val)) {
foreach ($val as $v) {
echo "$v
"; // lk, ok
}
} else {
echo "$k => $val
"; // 0 => Linux伺服器設定
}
}
$menu = [
['name'=>'系統設定', 'url'=>'?action=config'],
['name'=>'驗證碼設定', 'url'=>'?action=seccode'],
['name'=>'模板管理', 'url'=>'?action=tpl'],
['name'=>'帳號管理', 'url'=>'?action=admin'],
['name'=>'新增帳號', 'url'=>'?action=add'],
];
foreach ($menu as $item) {
echo "名稱: {$item['name']} / 連結: {$item['url']}
";
}
// 輸出每項 name 與 url
function printArray($arr, $indent = 0) {
$prefix = str_repeat(' ', $indent);
foreach ($arr as $k => $v) {
if (is_array($v)) {
echo "{$prefix}[$k] => Array
";
printArray($v, $indent + 1);
} else {
echo "{$prefix}[$k] => $v
";
}
}
}
$data = [
'user' => ['name'=>'John', 'age'=>30],
'posts' => [
['title'=>'Post 1', 'tags'=>['php', 'mysql']],
['title'=>'Post 2', 'tags'=>['js', 'vue']],
]
];
printArray($data);
$value 不影響原陣列foreach ($arr as &$v) { $v *= 2; }$arr = [18, 20, 25];
$count = count($arr);
for ($i = 0; $i < $count; $i++) {
echo $arr[$i] . "
";
}
掌握 is_array() 判斷配合遞迴/巢狀 foreach,即可靈活處理任意深度的陣列結構。