简化/减少代码 - 如果

时间:2011-06-02 15:53:32

标签: php arrays

$form = array();
$form = $_POST['data'];

    function livre($form) {
        if (empty($form["radios"]) || empty($form["age"]) 
        || empty($form["gender"]) || empty($form["civil"]) 
        || empty($form["formation_area"]) || empty($form["scholarithy"])
        || empty($form["professional_activity"]) || empty($form["city_work"])
        || empty($form["contract_job"]) || empty($form["salary"])){
            echo ("empty");
        }
        else
        echo ("not empty");

    }

        livre($form_data_array);

第一个问题是:可以将空数减少到一个,例如empty($form) || ($form1)

第二个是:我如何减少行数,我觉得我使用的这个方案不是最好的方法。我无法简单地验证数组是否为空,因为只有一些索引可以为空。

感谢

7 个答案:

答案 0 :(得分:5)

您可以将所有必须在数组中测试的字段名称存储起来:

$fields = array('radios', 'age', ...);

然后循环遍历:

foreach($fields as $field) {
   if(empty($form[$field])) {
       echo 'empty';
       break;
   }
}

旁注:您不需要$form = array();

答案 1 :(得分:1)

更紧凑的方法是:

if (count(array_filter($form, "strlen")) != count($form)) {
    echo "one field was empty";
}

请注意,它会执行实际的strlen测试,而不是empty。这更适合文本字段,因为它不会将"0"视为缺席。

答案 2 :(得分:0)

$empty = false;
foreach ($_POST as $value) 
{ 
   if (empty($value))
       $empty=true;
}

答案 3 :(得分:0)

您可以循环搜索表单中的每个元素:

function livre($form)
{
    $elements = array(
      'radios',
      'age',
      ...
    );

    foreach($elements as $el)
    {
      if(!key_exists($el, $form)
      {
        echo 'empty';
      }
    }
    echo 'not empty';
}
livre($form_data_array);

答案 4 :(得分:0)

while ($form[$i])
{
if (empty($form[$i])
   echo "empty";
else
   $i++;
}

答案 5 :(得分:0)

你可以尝试这样做。

function livre($form) {
        if(is_valid($form))
            echo("valid")
        else
            echo ("not valid");

}
function is_valid($post) {
    $required_fields = ["radios", "age", "gender", "civil", "formation_area", "scholarithy", 
                       "professional_activity", "city_work", "contract_job", "contract_job", "salary"]

    for($key in $required_fields)
        if(empty($post[$key]))
            return false;
    return true;
}

我引入了一个单独的函数来验证帖子数据,我做了一个for循环来检查数据是否有效。

答案 6 :(得分:0)

我非常喜欢马里奥给出的答案!!

如果这样可行,这可能有点快:

    function livre() 
    {
    $form = $_POST['data'];

        if (
    $form["radios"]==''|| $form["age"]=='' || $form["gender"]==''||
    $form["civil"]=='' || $form["formation_area"]=='' || 
    $form["scholarithy"] =='' || $form["professional_activity"]==''||
    $form["city_work"]=='' || $form["contract_job"]=='' ||
    $form["salary"]==''
    )
      echo ("empty");

        else
        echo ("not empty");

    }

livre();