0

私は次の配列を持っています:

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のエラーメッセージが1つだけではないということです。そのため、両方の方法を組み合わせたこのような方法を探します。

$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,bまたはの失敗メッセージのインスタンスを配列で検索する方法を探していますc

主な問題は、in_arrayを使用するときに検索できる1つの変数または他の何かが必要なことです。より具体的にするために:

入力フィールドごとにエラーレイヤーがあります。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)**)

そのため、次のような変数を1つだけ検索する方がよいと思いました。

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

これについてアドバイスしてくれる人がいれば、本当にありがたいです。どうもありがとう。

4

1 に答える 1

2

array_intersectin_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
}
于 2012-07-20T10:08:45.650 に答える