如果$posted
最初來自$_POST
在某些時候,(比如從輸入表單上的值),所有的鍵將被設置,即使一些可能設置爲''
。由於您的鍵爲$required
陣列中的值,因此最好只檢查循環中的必需字段。您可以使用empty
來同時驗證它們是否存在並具有真值。假設下面的代碼是一個函數或文件的內容的身體,這樣的事情應該工作:爲什麼你有array_intersect
做的方式是行不通的
foreach ($required as $requirement) {
// if everything has to have a value, just return false as soon as something doesn't
if (empty($posted[$requirement]) return false;
}
return true;
部分原因是功能檢查$required
中的值與$posted
中的值,並且您需要檢查$required
中的值與中的鍵中的$posted
中的值。另一部分是array_intersect
將返回兩個數組共有的值,而不是丟失的值。
如果$posted
中的某些鍵確實可能不存在,則最好使用鍵而不是按值定義$required
數組,然後使用array_diff_key
。
$required['FirstName'] = true;
$required['LastName'] = true;
$missing_requirements = array_diff_key($required, $posted);
如果$required
每個密鑰是存在於$posted
,其結果將是一個空數組,這將評估爲false
。
謝謝你的回答。我很驚訝,我發現只要檢查所有必填字段的「if(empty())...」平均快50%左右。我認爲這會更快。 – JROB
好吧,它有沒有函數調用的優點,如果你像我建議的那樣做,你實際上不需要查看所有的東西,只要找到一個缺失的東西就可以停止查找。 –