is_array() 是判斷變數型別為陣列的標準函式,常用於表單驗證、Session 檢查、API 回應處理等安全性相關場景。
bool is_array(mixed $var)
true:$var 為陣列false:非陣列(含 null、字串、整數、物件等)$arr = [18, 20, 25]; $str = "hello"; $num = 123; $obj = new stdClass(); var_dump(is_array($arr)); // bool(true) var_dump(is_array($str)); // bool(false) var_dump(is_array($num)); // bool(false) var_dump(is_array($obj)); // bool(false) var_dump(is_array(null)); // bool(false)
$hobbies = $_POST['hobby'] ?? [];
if (!is_array($hobbies)) {
$hobbies = [$hobbies]; // 單值轉陣列
}
// 現在 $hobbies 保證是陣列,可安全 foreach
$cart = $_SESSION['cart'] ?? [];
if (!is_array($cart)) {
// 資料異常,重置
$_SESSION['cart'] = [];
$cart = [];
}
$response = json_decode($json, true);
if (!is_array($response)) {
throw new Exception('API 回應格式錯誤');
}
foreach ($response as $item) { ... }
function processArray($data) {
if (!is_array($data)) {
return $data; // 非陣列直接回傳
}
foreach ($data as $k => $v) {
$data[$k] = processArray($v);
}
return $data;
}
| 函式 | 用途 | 備註 |
|---|---|---|
| is_array() | 檢測是否為陣列 | 最常用、效能最好 |
| is_object() | 檢測是否為物件 | |
| is_iterable() | 檢測可否 foreach (PHP 7.1+) | 陣列、Traversable 物件、Generator 均為 true |
| gettype() | 取得型別字串 | 回傳 "array", "object", "string" 等 |
empty($arr) 為 true 不代表不是陣列(空陣列也是陣列)count($arr) > 0 無法區分非陣列變數(會觸發警告)ArrayAccess 可像陣列存取,但 is_array() 回傳 false养成在遍歷、計數、存取陣列元素前先用 is_array() 守衛,能避免大量「Invalid argument supplied for foreach」等執行期錯誤。