陣列是 PHP 處理資料集合的核心結構。本文從零開始,涵蓋索引/關聯陣列定義、三種遍歷方式、多維陣列操作、資料庫查詢結果映射,以及九大超全域變數的實戰用法。
<?php
// 索引陣列(數字鍵)
$indexed = [1, 2, 3]; // 簡寫語法 PHP 5.4+
$indexed = array(1, 2, 3); // 傳統語法
// 關聯陣列(字串鍵)
$assoc = ["name" => "user1", "age" => 30];
// 混合鍵:字串鍵後的數字鍵會自動遞增
$mixed = ["name" => 1, 3, "age" => 4, 5, 100 => 6, 7, 400 => 8, 9];
/*
輸出結構:
[name] => 1
[0] => 3
[age] => 4
[1] => 5
[100] => 6
[101] => 7
[400] => 8
[401] => 9
*/
?>
print_r($arr) 或 var_dump($arr)(含型別)。echo $arr['age']; echo $arr[100];$arr['age'] = 30; $arr[] = 1; $arr[] = 2;for 迴圈(適用索引陣列)<?php
$arr = [1,2,3,4,5,6];
for ($i = 0; $i < count($arr); $i++) {
$color = ($i % 2 === 0) ? 'black' : 'blue';
echo "<h1 style='color:$color'>第".($i+1)."個: {$arr[$i]}</h1>";
}
?>
foreach(推薦,適用所有陣列)<?php
$arr = ['name'=>'junzai', 'age'=>20, 'sex'=>'man', 'abc'];
foreach ($arr as $key => $val) {
$style = ($num++ % 2) ? '' : "style='color:red'";
echo "<h1 $style>{$key}: {$val}</h1>";
}
?>
while(list($k,$v)=each($arr))(舊式,不推薦)each() 在 PHP 7.2+ 棄用,PHP 8.0 移除,請改用 foreach。
<?php
// 二維
$arr2 = [1, 2, [4, 5]];
echo $arr2[2][0]; // 4
// 三維
$arr3 = [1, 2, [3, [4, 5]]];
echo $arr3[2][1][0]; // 4
?>
<?php
function printArray($arr) {
foreach ($arr as $val) {
if (is_array($val)) {
printArray($val);
} else {
echo $val . "<br>";
}
}
}
$arr = ["a", "b", ["c", "d"], ["e", ["f", "z"]]];
printArray($arr);
?>
一張資料表 = 二維陣列,每列 = 一維關聯陣列。
<?php
mysql_connect("localhost", "root", "1234");
mysql_select_db("test");
mysql_query("SET NAMES utf8");
$sql = "SELECT * FROM user";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
print_r($row); // 每列是一個關聯陣列
}
?>
注意:mysql_* 已移除,實務請用 PDO 或 mysqli。
| 變數 | 用途 | 常用鍵範例 |
|---|---|---|
$_SERVER | 伺服器與執行環境資訊 | SERVER_NAME, REQUEST_URI, HTTP_USER_AGENT, SCRIPT_FILENAME |
$_GET | URL 參數(GET 請求) | ?id=10&name=abc → $_GET['id']='10' |
$_POST | 表單 POST 資料 | $_POST['username'] |
$_REQUEST | 合併 GET/POST/COOKIE(不建議依賴) | $_REQUEST['id'] |
$_FILES | 上傳檔案資訊 | $_FILES['avatar']['tmp_name'] |
$_COOKIE | 客戶端 Cookie | $_COOKIE['session_id'] |
$_SESSION | 伺服器端 Session | $_SESSION['user_id'] |
$GLOBALS | 所有全域變數(含上述八個) | $GLOBALS['_GET'], $GLOBALS['myVar'] |
$_SERVER 關鍵資訊速查SERVER_NAME → localhost
SERVER_ADDR → 127.0.0.1
REQUEST_METHOD → GET / POST
REQUEST_URI → /index.php?id=1
HTTP_USER_AGENT → Mozilla/5.0...
SCRIPT_FILENAME → /var/www/html/index.php
<!-- GET 形式:a 標籤或表單 method="get" -->
<a href="rev.php?name=jun&age=20">點我</a>
<!-- POST 形式:表單 method="post" -->
<form action="rev.php" method="post">
<input name="name"> <input name="age"> <button>送出</button>
</form>
<?php /* rev.php */ ?>
<?php
// GET
echo $_GET['name']; // jun
// POST
echo $_POST['name']; // jun
?>
$GLOBALS 修改全域變數<?php
$username = "user1";
function change() {
$GLOBALS['username'] = "USER2"; // 影響外部變數
}
change();
echo $username; // USER2
?>
陣列與超全域變數是 PHP 處理 HTTP 請求、資料轉換、業務邏輯的基石。熟練掌握遍歷與多維操作,能大幅簡化資料處理代碼;善用超全域變數並注意安全過濾(filter_input()、預處理語句),是建構健壯應用的關鍵。