2012-06-05 92 views
3

我試圖從表單中排除字段中的字段。目前,整個陣列付款都是針對每條語句執行的。我試圖保持領域額外,extra2和extra3不被要求。可以將其設置爲null或將其定義爲空字符串。這是我目前有:PHP從foreach語句中排除特定變量值

foreach($p as $key => $value) { 
    $value = trim($value); 
    if($value == '') { 
     $keyName = preg_replace('/([A-Z])/', " $1", $key); 
     $this->_errors['Payment ' . $keyName] = __('Payment ','cart66') . $keyName . __(' required','cart66'); 
     $this->_jqErrors[] = "payment-$key"; 
    } 

這是我都試過了,但無濟於事:

foreach($p as $key => $value) { 
    $value = trim($value); 
    if($value == '' && $p != 'extra' || 'extra2' || 'extra3') { 
     $keyName = preg_replace('/([A-Z])/', " $1", $key); 
     $this->_errors['Payment ' . $keyName] = __('Payment ','cart66') . $keyName . __(' required','cart66'); 
     $this->_jqErrors[] = "payment-$key"; 
    } 
else if ($p['extra'] == '') { 
$_p['extra'] = NULL; 
} 
else if ($p['extra2'] == '') { 
$_p['extra2'] = NULL; 
} 
else if ($p['extra3'] == '') { 
$_p['extra3'] = NULL; 
} 

}

這是我的語法是不是?數據庫本身被設置爲接受null,並且不是主要的或唯一的。

回答

2

一個好方法就是檢查循環的頂部,如果你在一個應該排除的字段中,繼續。

$exclude = array('field1', 'field2', ...); 
foreach ($p as $key => $value) 
{ 
    if (in_array($key, $exclude)) { continue; } 

    // your code... 
} 
+0

這是相反的方式,它排除了一切,但我想排除的領域,但我絕對可以從這裏處理它。非常感謝你。這是Benjamin提供的array_diff的不同方法嗎? –

+0

是的,他建議你在循環前從數組中去掉不需要的元素,然後(如有必要)在之後重新插入它們。如果你擁有相當大的數組,但是對於典型的輸入數組,差異應該可以忽略不計,這樣做可能會有一些性能優勢,所以使用哪一個都可以提供最易讀,可維護的代碼。 – Okonomiyaki3000

+0

我應該把「!」在我的情況下如此以至於我真的想要對嗎? –