即使数组值为空,条件也会失败

时间:2014-04-09 07:50:16

标签: php

我有一段代码,即使数组为空,条件也会失败。 这是代码:

echo "<pre>";
print_r($_FILES['jform']['name']['gallery']);

输出

Array
(
    [0] => 
)

这是条件:

$galfile = $_FILES['jform']['name']['gallery'];
if(!empty($galfile))
{
    //do something
}

它应该失败,但程序进入if块。为什么呢?

4 个答案:

答案 0 :(得分:3)

从print_r()可以看出,数组不是空的 - 它有一个元素,在另一侧看起来像空白或空。

<强>更新

我建议您阅读 POST method uploads ,在那里您将了解到name是该文件的原始名称,而tmp_name是该文件的随机名称临时文件,刚刚上传。

根据我的经验,您应该查看 Error Messages

您感兴趣的支票是:

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所在阵列的名称。

答案 1 :(得分:1)

在你的情况下,print_r()告诉你galfile == array('') // 1 element is in the array

根据documentaion,只有array() // 0 elements被视为空。所以if语句正确执行。

在你的情况下你应该写:

$galfile = $_FILES['jform']['name']['gallery'];
if(!empty($galfile) && !empty($galfile[0]) )
{
    //do something
}

答案 2 :(得分:1)

如您所见,您的数组不为空,它有一个空白元素。

解决方法是array_filte r,它将消除空白数据

$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);
}

答案 3 :(得分:0)

使用数组时,在检查为空之前,您可以使用array_filter或类似函数清理数组:

$galfile = array_filter($_FILES['jform']['name']['gallery']);
if(!empty($galfile))
{
    //do something
}

但是当你使用全局数组_FILES时,更正确的是检查错误:

if($_FILES['jform']['error']['gallery'] == 0)
{
    //do something
}

P.S。如果要过滤所有数组元素,可以使用filter_var_array