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

Php 即使数组值为空,条件也会失败,php,Php,我有一段代码,其中即使数组为空,条件也会失败。 代码如下: echo "<pre>"; print_r($_FILES['jform']['name']['gallery']); 这就是条件: foreach ( array_keys( $_FILES['jform']['gallery'] ) AS $key ) { if ( UPLOAD_ERR_OK == $_FILES['jform']['gallery']['error'][$key] ) { /

我有一段代码,其中即使数组为空,条件也会失败。 代码如下:

echo "<pre>";
print_r($_FILES['jform']['name']['gallery']);
这就是条件:

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]
    }
}

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

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

更新

我建议您阅读,您将了解到
name
是文件的原始名称,
tmp\u name
是刚刚上载的临时文件的随机名称

根据我的经验,您应该检查

您感兴趣的支票是:

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

注意
gallery
位于
name

之前的数组的名称,从打印内容中可以看出,数组不是空的,它有一个元素,另一侧看起来像空白或空的

更新

我建议您阅读,您将了解到
name
是文件的原始名称,
tmp\u name
是刚刚上载的临时文件的随机名称

根据我的经验,您应该检查

您感兴趣的支票是:

$galfile = $_FILES['jform']['name']['gallery'];
if(!empty($galfile) && !empty($galfile[0]) )
{
    //do something
}
注意
gallery
name
之前的数组的名称,在您的例子中print\r()告诉您
galfile==array(“”)//1个元素在数组中

根据唯一的
array()//0个元素
被认为是空的。因此,if语句执行正确

在你的情况下,你应该写:

$array = array(0=>'');
$array1 = array_filter($array);

print_r($array1);

if(!empty($array1)){
  echo "has elememt";
}else{
    echo "empty";
}
在您的例子中,print_r()告诉您
galfile==array(“”)//1个元素在数组中

根据唯一的
array()//0个元素
被认为是空的。因此,if语句执行正确

在你的情况下,你应该写:

$array = array(0=>'');
$array1 = array_filter($array);

print_r($array1);

if(!empty($array1)){
  echo "has elememt";
}else{
    echo "empty";
}

正如您所看到的,数组不是空的,它有一个空元素

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

$array1 = array_filter($array,"call_back_function");
function call_back_function($val){
    return trim($val);
}
这就是你需要的

更新

如果该值包含多个空格怎么办?是的,可以使用回调函数来处理

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

正如您所看到的,数组不是空的,它有一个空元素

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

$array1 = array_filter($array,"call_back_function");
function call_back_function($val){
    return trim($val);
}
这就是你需要的

更新

如果该值包含多个空格怎么办?是的,可以使用回调函数来处理

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

使用阵列时,在检查是否为空之前,可以使用或类似的函数清理阵列:

if($_FILES['jform']['error']['gallery'] == 0)
{
    //do something
}
但当您使用全局数组\u文件时,更正确的方法是检查错误:


注意:如果要筛选所有数组元素,可以在处理数组时使用

,在检查是否为空之前,可以使用或类似的功能清理数组:

if($_FILES['jform']['error']['gallery'] == 0)
{
    //do something
}
但当您使用全局数组\u文件时,更正确的方法是检查错误:


另外,如果要过滤所有数组元素,可以使用

,那么如何克服此问题??这是输入框。@amit-打印的输出是什么($\u文件['jform']['gallery']['name']);那么我该如何克服这个问题呢??这是输入框。@amit-打印的输出是什么($\u文件['jform']['gallery']['name']);您确定元素为“”-也可以是两个空格!?你为什么要过滤一个值呢?它可能是存在的原因!您确定元素为“”-也可以是两个空格!?你为什么要过滤一个值呢?它可能是存在的原因!