php in_array检查数组的最佳方法?

时间:2012-07-20 09:55:26

标签: php html arrays if-statement error-handling

我有以下数组:

if ( empty($a)||empty($b)||empty($c)){
    if(empty($a)){
        $errors[]="a is empty";
    }
    if(empty($b)){
        $errors[]="b is empty";
    }
    if(empty($c)){
        $errors[]="c is empty";
            }
 }...

如果数组中填充了if (in_array('??'; $errors))$a$b错误消息,我如何与$c核实?

我知道这种方式:

$errors = array(
    'a' => 'Please enter a.',
    'b' => 'Please enter b.',
    'c' => 'Please enter c.'
);

如果if (in_array('a'; $errors))有错误消息,我可以在a查看。我遇到的问题是,我不仅有a,b或c的错误消息。所以我寻找一种结合两种方法的方式:

$errors = array(
        'a' => if ( empty ($a) || $specific_error1_for_a  || $specific_error2_for_a ),
        'b' => if ( empty ($b) || $specific_error1_for_b  || $specific_error2_for_b ),
        'c' => if ( empty ($c) || $specific_error1_for_c  || $specific_error2_for_c ),
    );

我正在寻找一种方法来搜索数组errors[],查找每个元素a,bc的失败消息实例。

主要问题是我想要一个变量或其他东西,我可以在使用in_array时搜索。为了更具体:

我的每个输入字段都有一个errorlayer。因此,如果特定输入字段有特定的错误消息,我需要搜索整个数组errors[]

<input type="text" id="a" name="a" value="<?php echo isset ($_POST['a'])? $_POST['a'] : ''; ?>" tabindex="10" autocomplete="off"/><?php if (**in_array(...., $errors)**):?><span class="error"><?php echo $errors['a'];?></span><?php endif;?>

问题是,就像我已经说过的那样,每个输入字段只有一个错误消息实例,所以我会这样:

(**in_array('a is empty' || 'a is too short' || 'a is too long' ..., $errors)**)

这就是为什么我认为只搜索一个这样的变量会更好:

(**in_array($a, $errors)**)

如果有人可以就此向我提出建议,我将非常感激。非常感谢。

1 个答案:

答案 0 :(得分:1)

array_intersect可以像in_array一样用于多个值:

if(array_intersect($errors, array(
    'a is empty',
    'specific_error1_for_a',
    'specific_error2_for_a',
))) {
    // There is an error for a
}

但是,我建议您以不同的方式设计您的程序。如果将错误存储在关联数组中,那么检查给定变量是否存在任何错误会变得更有效:

if(empty($a)){
    $errors['a'][]="a is empty";
}
if(empty($b)){
    $errors['b'][]="b is empty";
}
if(empty($c)){
    $errors['c'][]="c is empty";
}

...

if(isset($errors['a'])) {
    // There is an error for a
}