我有一段代码,即使数组为空,条件也会失败。 这是代码:
echo "<pre>";
print_r($_FILES['jform']['name']['gallery']);
输出
Array
(
[0] =>
)
这是条件:
$galfile = $_FILES['jform']['name']['gallery'];
if(!empty($galfile))
{
//do something
}
它应该失败,但程序进入if
块。为什么呢?
答案 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