一般判斷陣列是否有鍵約莫就是 array_key_exists()、empty()、isset()。 最近遇到的問題是,如果需要判斷多於兩層的鍵存不存在,會出現 Fatal error:
$a = ''; var_dump(empty($a['1']['2'])); // bool(true) var_dump(isset($a['1']['2'])); // bool(false) var_dump(empty($a['1']['2']['3'])); // PHP Fatal error: Cannot use string offset as an array var_dump(isset($a['1']['2']['3'])); // PHP Fatal error: Cannot use string offset as an array $a['1'] = ''; var_dump(empty($a['1']['2']['3'])); // bool(true) var_dump(isset($a['1']['2']['3'])); // bool(false) var_dump(empty($a['1']['2']['3']['4'])); // PHP Fatal error: Cannot use string offset as an array var_dump(isset($a['1']['2']['3']['4'])); // PHP Fatal error: Cannot use string offset as an array $a['1']['2'] = ''; var_dump(empty($a['1']['2']['3']['4'])); // bool(true) var_dump(isset($a['1']['2']['3']['4'])); // bool(false) var_dump(empty($a['1']['2']['3']['4']['5'])); // PHP Fatal error: Cannot use string offset as an array var_dump(isset($a['1']['2']['3']['4']['5'])); // PHP Fatal error: Cannot use string offset as an array
但是如果有一個鍵不匹配,就不會發生問題:
$a['x'] = ''; var_dump(empty($a['1']['2']['3'])); // bool(true) var_dump(isset($a['1']['2']['3'])); // bool(false) var_dump(empty($a['1']['2']['3']['4'])); // bool(true) var_dump(isset($a['1']['2']['3']['4'])); // bool(false) $a['1']['y'] = ''; var_dump(empty($a['1']['2']['3']['4'])); // bool(true) var_dump(isset($a['1']['2']['3']['4'])); // bool(false) var_dump(empty($a['1']['2']['3']['4']['5'])); // bool(true) var_dump(isset($a['1']['2']['3']['4']['5'])); // bool(false) $a['x']['2'] = ''; var_dump(empty($a['1']['2']['3']['4'])); // bool(true) var_dump(isset($a['1']['2']['3']['4'])); // bool(false) var_dump(empty($a['1']['2']['3']['4']['5'])); // bool(true) var_dump(isset($a['1']['2']['3']['4']['5'])); // bool(false)