我有一段代码,即使数组为空,条件也会失败。这是代码:
echo "<pre>";
print_r($_FILES['jform']['name']['gallery']);
输出
Array
(
[0] =>
)
这是条件:
$galfile = $_FILES['jform']['name']['gallery'];
if(!empty($galfile))
{
//do something
}
它应该失败,但程序进入if
块。为什么?
正如您从print_r()中看到的,数组不是空的——它有一个元素,在另一边看起来像空白或空的。
更新
我建议您阅读POST方法上传,其中name
是文件的原始名称,tmp_name
是刚刚上传的临时文件的随机名称。
根据我的经验,您应该检查错误消息。
你感兴趣的支票是:
foreach ( array_keys( $_FILES['jform']['gallery'] ) AS $key ) {
if ( UPLOAD_ERR_OK == $_FILES['jform']['gallery']['error'][$key] ) {
// do the stuff with the uploaded file in $_FILES['jform']['gallery']['tmp_name'][$key]
}
}
请留意gallery
位于name
之前的阵列的名称。
正如您所看到的,您的数组不是空的,它有一个空元素。
解决方法是array_filter,它将消除空白数据
$array = array(0=>'');
$array1 = array_filter($array);
print_r($array1);
if(!empty($array1)){
echo "has elememt";
}else{
echo "empty";
}
这就是你需要的
更新
如果值包含多个空格,是的,这可以使用回调函数来处理
$array1 = array_filter($array,"call_back_function");
function call_back_function($val){
return trim($val);
}
在您的案例中,print_r()告诉您galfile == array('') // 1 element is in the array
根据文件,只有array() // 0 elements
被认为是空的。因此if语句执行正确。
在你的情况下,你应该写:
$galfile = $_FILES['jform']['name']['gallery'];
if(!empty($galfile) && !empty($galfile[0]) )
{
//do something
}
当您使用数组时,在检查是否为空之前,您可以使用array_filter或类似函数对数组进行净化:
$galfile = array_filter($_FILES['jform']['name']['gallery']);
if(!empty($galfile))
{
//do something
}
但当您使用全局数组_FILES时,更正确的是检查错误:
if($_FILES['jform']['error']['gallery'] == 0)
{
//do something
}
附言:如果要过滤所有数组元素,可以使用filter_var_array