list() 是語言結構,用於一次操作將數值索引陣列的值賦予多個變數。關鍵限制:
$arr = ['Tom', '123456']; // 正確:索引 0,1 list($name, $pwd) = $arr; echo "Welcome $name! Password: $pwd"; // Welcome Tom! Password: 123456
$arr1 = ['name'=>'Tom', 'pwd'=>'123456']; // 關聯陣列 list($name, $pwd) = $arr1; // Notice: Undefined offset 0,1 $arr2 = [1=>'Tom', 2=>'123456']; // 索引從 1 開始 list($name, $pwd) = $arr2; // Notice: Undefined offset 0
$data = [10, 20, 30, 40]; // 跳過第 2 個元素 list($a, , $c) = $data; // $a=10, $c=30 // 巢狀 list(PHP 7.1+) $nested = [[1,2], [3,4]]; list(list($a,$b), list($c,$d)) = $nested; // $a=1,$b=2,$c=3,$d=4 // 短陣列語法(PHP 7.1+) [$x, $y] = [100, 200];
list($width, $height, $type, $attr) = getimagesize('photo.jpg');
list($year, $month, $day) = explode('-', '2024-01-15');
list($a, $b) = [$b, $a];
$users = [
['Alice', 25, 'alice@example.com'],
['Bob', 30, 'bob@example.com'],
];
foreach ($users as list($name, $age, $email)) {
echo "$name ($age) <$email>\n";
}
[] 短語法更簡潔、支援鍵名指定、可與 foreach 直接搭配:
// 指定鍵名(關聯陣列也適用)
['name' => $name, 'age' => $age] = ['name'=>'Tom', 'age'=>25];
// foreach 直接解構
foreach ($users as ['name'=>$n, 'age'=>$a, 'email'=>$e]) { ... }
list() 適合固定結構的數值索引陣列快速解構。[] 解構語法,功能更強、語法更現代。getimagesize、explode、preg_match 等固定回傳格式的函式搭配。