2012-07-20 60 views
0

我有以下陣列:php in_array檢查數組的最佳方式是什麼?

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), 
    ); 

我正在尋找一種方式來搜索這些元素a,bc的失敗消息的情況下,陣列errors[]

主要問題是,我想有一個變量或其他的東西,我可以搜索時使用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)**) 

我真的很感激,如果有人可以給我這方面的建議。非常感謝。

+0

'array_intersect'可能有用(因爲它類似於具有多個值的in_array),但我並不完全清楚你在這裏要做什麼。 – Brilliand 2012-07-20 10:00:45

+0

我更新了我的問題。希望現在清楚。 – bonny 2012-07-20 10:06:53

回答

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 
} 
+0

好吧,更多維數組......我忘了這一點。我會嘗試。感謝迄今。 – bonny 2012-07-20 10:21:40

+0

沒關係,好​​像我在顯示它們時遇到問題。我使用:<?php if(isset($ errors ['a'])):?><?php echo $ errors_2;?><?php endif;?>並使它具有可變性,我有:foreach($ errors爲$ errors_1){foreach($ errors_1 as $ errors_2){echo $ errors_2;}} – bonny 2012-07-20 11:04:40

+0

在第一個實例中,您應該回顯'$ errors ['a' ] [0]'或'implode('
',$ errors ['a'])''而不是'$ errors_2'。儘管(用foreach循環),但我沒有發現第二個實例有什麼問題;你能告訴我它做錯了什麼嗎? – Brilliand 2012-07-20 12:22:25

相關問題