php - AND/OR 比较从 null、true 或 false 开始......?
问题描述
我想遍历一组条件,仅在满足每个条件时才返回 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 met
Array
(
[0] => Failed to match 0 to 1
[1] => Failed to match 0 to 4
[2] => Failed to match 0 to 5
)
NOT all conditions met
Array
(
)
无论 $retval 的初始值是多少,一个或两个测试都会失败。如果初始值为真,则两个测试都返回真(这是不正确的);如果为 false 或 null,则两者都返回 false(这也是不正确的)。
是的,我可以在第一个错误时中断,但是为什么测试失败很重要,并且它可能因不止一个原因而失败,所以我不应该在第一个失败被捕获后立即跳出循环。
有没有办法在不添加另一个变量来统计命中和未命中的情况下做到这一点?
解决方案
您需要初始化$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>";
}
}
推荐阅读
- spring - 如何在使用 Redis 会话存储的 Spring Boot 应用程序中获取当前 Principal
- aws-lambda - 使用 Lambda 代理集成的 Lambda 步骤函数
- pandas - Pandas:根据来自较小数据帧的信息计算巨型数据帧每一行中的匹配值
- r - 如何设置 ggplot 标题的样式?
- playframework - 配置键“authorizationUrl”设置为 null 但应为 STRING]
- angular - Springboot Angular安全-REST调用禁止403
- c# - ASP.NET Web API 将复杂对象发送到前端
- html - 如何使用多个 HTML 类创建 Yii2 ActiveForm 字段
- xcode - 如何从 Xcode 中的文件中删除 \r(回车)?
- r - 在整个数据集而不是单个列上使用 ifelse 语句