我想遍歷一組條件,僅在滿足每個條件時才返回 true,如果不滿足則沿途收集原因。<?php$dataval = 0;$tests = [ [1,0,0,4,5], [0,0,0,0,0]];foreach($tests as $condition) { $retval = null; $reasons = []; foreach($condition as $item){ if($item == $dataval){ $retval == $retval && true; } else { $retval == $retval && false; $reasons[] = "Failed to match " . $dataval . " to " . $item; } } if($retval === true){ echo "All conditions met<br>"; } else { echo "NOT all conditions met<br>"; } echo "<pre>" . print_r($reasons, 1) . "</pre>";}?>輸出NOT all conditions metArray( [0] => Failed to match 0 to 1 [1] => Failed to match 0 to 4 [2] => Failed to match 0 to 5)NOT all conditions metArray()無論 $retval 的初始值是多少,一個或兩個測試都會失敗。如果初始值為真,則兩個測試都返回真(這是不正確的);如果為 false 或 null,則兩者都返回 false(這也是不正確的)。是的,我可以在第一個錯誤時中斷,但是為什么測試失敗很重要,并且它可能因不止一個原因而失敗,所以我不應該在第一個失敗被捕獲后立即跳出循環。有沒有辦法在不添加另一個變量來統計命中和未命中的情況下做到這一點?
1 回答

慕容708150
TA貢獻1831條經驗 獲得超4個贊
您需要初始化$retval為true. 當您遇到不匹配時,將其設置為false并將錯誤推送到$reason陣列上。
但實際上并不需要$retval變量。只需檢查數組是否為空。
foreach($tests as $condition) {
$reasons = [];
foreach($condition as $item){
if($item != $dataval) {
$reasons[] = "Failed to match " . $dataval . " to " . $item;
}
}
if(empty($reasons)){
echo "All conditions met<br>";
} else {
echo "NOT all conditions met<br>";
echo "<pre>" . print_r($reasons, 1) . "</pre>";
}
}
- 1 回答
- 0 關注
- 95 瀏覽
添加回答
舉報
0/150
提交
取消