2012-12-10 95 views
1

我有一个名称为date_field[]的html文本框元素数组。表单中可能有多个字段。提交表单的检查后,文本框的至少一个是否不是空的,我用 -检查表单字段数组时空功能不工作

<?php 
if(empty($_POST["date_field"])){ 
     echo "Is empty"; 
    }else{ 
     echo "is not empty"; 
    } 
?> 

它呼应is not empty不管我是否填充或我没有填补这一date_field

P.S.如果我用印print_r

形式值。如果我没有把价值

[followup_date] => Array 
     (
      [0] => 
     ) 

如果我把价值

[followup_date] => Array 
     (
      [0] => 2012-12--14 
     ) 

任何帮助将高度赞赏

+1

第一个字段为:if(empty($ _ POST [“date_field”] [0])){..'或一个循环多个 – 2012-12-10 09:07:22

回答

4

你的“空“array contains a empty string:

array(0 => '') 

这不是空的数组。唯一的“空”阵列是array()

您可能想要通过array_filter运行它,它将删除所有评估为false(其中还包括"0",请注意)的元素。

+0

因为这个字段是假设输入日期,我想我可以安全地使用'array_filter' ?? – Sharmila

+0

是的,听起来很合理。 – deceze

2

该数组不为空,因为它将为每个非禁用表单字段包含一个元素(即使这些字段为空)。

您可以使用@deceze提到的array_filter函数,但请记住,这也会删除某些人不会认为是空的元素。

因此,我宁愿自己运行数组,并检查是否所有元素都是空的。例如:

function all_is_empty(array $subject) 
{ 
    foreach($subject as $value) 
     if(str_len($value) > 0) 
      return false; 
    return true; 
} 

用法:

if(all_is_empty($_POST["date_field"])) 
{ 
    echo "Is empty"; 
} 
else 
{ 
    echo "is not empty"; 
} 

如果是我,我可能也检查所有字段是有效的结合这一点。因此,如果您知道该阵列中的所有字段应该是日期,请检查它们实际上是否为:)

+0

或者,你知道......'array_filter($ array,'strlen')'... :) – deceze

+0

是的,我在写完这些后看到了回调选项,但我仍然认为这将是一种更简洁的方式。在这种情况下,'all_is_empty($ s)'比'empty(array_filter($ s,'str_len')'更明显,至少我认为是这样:) – Svish