list() 是語言結構(非函式),能一行程式碼將陣列元素批量賦值給多個變數,常用於資料庫查詢結果解包、多值回傳函式。
void list(mixed $var1, mixed $var2, ...)
list('a'=>$a, 'b'=>$b) = $arr;$arr = [18, 20, 25]; list($wang, $li, $zhang) = $arr; echo $wang; // 18 echo $zhang; // 25
$result = mysqli_query($conn, "SELECT id, username, email FROM users");
while (list($id, $username, $email) = mysqli_fetch_row($result)) {
echo "用戶: $username, Email: $email
";
}
$arr = [18, 20, 25]; list($a[0], $a[1], $a[2]) = $arr; print_r($a); // Array ( [2] => 25 [1] => 20 [0] => 18 ) ← 順序相反!
原因: list() 從索引 0 開始依序賦值,但陣列索引賦值時較大索引後寫入會覆蓋,導致最終陣列索引順序反轉。
// 數字索引 [$a, $b, $c] = [1, 2, 3]; // 關聯索引(指定鍵名) ['name'=>$name, 'age'=>$age] = ['name'=>'John', 'age'=>30]; // 巢狀解構 ['user'=>['name'=>$name, 'email'=>$email]] = $data;
function getUser() { return [1, 'John', 'john@example.com']; } list($id, $name, $email) = getUser();list($id, , $email) = $arr;(中間留空)each() 遍歷(舊式,不推薦)掌握 list() 快速解包陣列,配合 PHP 7.1+ 解構賦值語法,寫出更簡潔可讀的程式碼。