PHP MySQLi多行列取值逻辑:值为0时自动切换至下一行
简化PHP多行取值逻辑的方案
嘿,我来帮你搞定这个PHP逻辑的简化问题!你现在需要从1到5行里依次找第一个非0的值,之前写两行的逻辑可能用了一堆if-else,扩展到五行肯定会越来越繁琐对吧?其实咱们可以用数组来重构这段代码,既简洁又好扩展,不管以后要加多少行都不用大改。
方法一:遍历数组找第一个非0值
把所有行的值放进一个数组里,然后循环遍历,找到第一个不为0的值就停止,这样逻辑清晰又易维护:
// 假设你的5行数据存在这些变量中 $row1 = 0; $row2 = 3; $row3 = 0; $row4 = 7; $row5 = 0; // 将所有行值存入数组 $rows = [$row1, $row2, $row3, $row4, $row5]; $targetValue = 0; // 默认值(如果所有行都是0时用) foreach ($rows as $value) { if ($value !== 0) { $targetValue = $value; break; // 找到第一个非0值就终止循环,提升效率 } } // 输出结果,这里会得到3(第一个非0的行值) echo $targetValue;
方法二:用array_filter简化代码
如果你想让代码更紧凑,可以结合array_filter和reset函数,一行搞定筛选和取值:
// 同样先准备数组 $rows = [$row1, $row2, $row3, $row4, $row5]; // 过滤出所有非0值,再取第一个元素 $targetValue = reset(array_filter($rows, fn($val) => $val !== 0)) ?: 0;
这里array_filter会把数组里所有0值去掉,reset则会返回过滤后数组的第一个元素;如果所有行都是0,reset会返回false,这时用?: 0来设置默认值。
为什么这两种方法更好?
对比你原来写两行的嵌套if逻辑:
// 原来两行的写法 $val = $row1 != 0 ? $row1 : $row2;
如果扩展到五行,就得写成多层嵌套的if-else或者三元表达式,不仅代码冗长,后期修改也容易出错。而用数组的方式,不管是5行还是10行,只需要把新的行值添加到数组里就行,逻辑完全不用改。
内容的提问来源于stack exchange,提问作者Johnptt
相关产品推荐
相关产品推荐

