我有以下多个复选框选择:
<input type="checkbox" name="fruit_list[]" value="apple">Apple
<input type="checkbox" name="fruit_list[]" value="banana">Banana
<input type="checkbox" name="fruit_list[]" value="mango">Mango
<input type="checkbox" name="fruit_list[]" value="orange">Orange
表单通过POST方法连接到processor.php
。验证:
if ( empty($_POST['fruit_list']) ){
echo "You must select at least one fruit.<br>";
} else{
foreach ( $_POST['fruit_list'] as $frname ){
echo "Favourite fruit: $frname<br>";
}
}
我的问题(上面的代码有效!但对我来说不清楚的点):
如果我没有选中任何复选框然后提交表单,那么
$_POST
数组是否包含一个名为$_POST['fruit_list']
的索引?假设你的答案是"否",那么怎么可能对不存在的数组元素使用
empty()
呢?不存在的数组元素表示NULL
?使用
!isset($_POST['fruit_list'])
而不是empty()
有什么区别
我大体上理解empty()
和isset()
之间的区别。
你能在这个例子的背景下解释一下吗?
- 如果我没有选中任何复选框然后提交表单,$_POST数组是否包含一个名为
$_POST['fruit_list']
的索引
否,密钥fruit_list不存在
要检查数组中是否存在密钥,最好使用array_key_exists
,因为如果值为NULL,isset
将返回错误
但在你的情况下,isset是的一个好方法
isset
-确定变量是否已设置并且不是NULL(有任何值)。
empty
-确定变量是否为空(0,null,'',false,array()),但您无法理解变量或键是否存在
例如:
$_POST['test'] = 0;
print 'isset check: ';
var_dump(isset($_POST['test']));
print 'empty check: ';
var_dump(empty($_POST['test']));
$_POST['test'] = null;
print 'isset NULL check: ';
var_dump(isset($_POST['test']));
print 'key exists NULL check: ';
var_dump(array_key_exists('test', $_POST));
isset check: bool(true)
empty check: bool(true)
isset NULL check: bool(false)
key exists NULL check: bool(true)
使用print_r()打印post数据。。
<?php
echo "<pre>"; print_r($_POST);
if (empty($_POST['fruit_list']) ){
echo "You must select at least one fruit.<br>";
}
else{
foreach ( $_POST['fruit_list'] as $frname ){
echo "Favourite fruit: $frname<br>";
}
}
?>
如果不选中任何复选框,则不会得到$_POST['fruit_list'],数组索引fruit_list
在数组中不存在
关于isset()
和empty()
之间的差异,请访问此处
答案:
1.$_POST
数组不包含$_POST['fruit_list']
2。第一个答案是"否"。如果变量不存在或其值等于FALSE,则视为空。如果变量不存在,empty()
不会生成警告。请参阅php.net中的
3Empty检查变量是否已设置,如果已设置,则检查是否为null、"、0等。Isset只是检查是否设置了它,它可以是任何非null的值。参见