亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AND/OR 比較從 null、true 或 false 開始......?

AND/OR 比較從 null、true 或 false 開始......?

PHP
白衣染霜花 2022-07-09 11:02:07
我想遍歷一組條件,僅在滿足每個條件時才返回 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>";

    }

}


查看完整回答
反對 回復 2022-07-09
  • 1 回答
  • 0 關注
  • 95 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號