如何用PHP统计加减运算式中参与运算的整数数量?
嘿,我来帮你搞定这个统计问题!咱们先把需求理清楚:要统计给定switch语句里,那些参与加减运算的整数变量个数——这里我默认是指出现在+/-运算符两侧的变量,单独直接赋值的不算(如果你的需求是把所有被赋值的变量都算,后面我也会补充说明)。
已给出的case手动统计
先逐个拆解你提供的switch分支:
- case 2:
$sum1 = $day1; $sum2 = $day2;→ 这里没有任何加减运算,只是直接赋值,所以参与运算的整数个数是0。 - case 3:
$sum1 = $day1 + $day2; $sum2 = $day3;→ 只有$day1 + $day2是加法运算,这里有2个整数参与,sum2是单独赋值不算,总数是2。 - case 4:
$sum1 = $day1 + $day2; $sum2 = $day3 + $day4;→ 两个加法表达式,各有2个整数,加起来总共4个。 - case 5:
$sum1 = $day1 + $day2 + $day3; $sum2 = $day4 + $day5;→ sum1里3个整数相加,sum2里2个,总共5个。 - case 6:
$sum1 = $day1 + $day2 + $day3; $sum2 = $day4 + $day5 + $day6;→ 两个加法表达式各3个整数,总数6个。 - case 7:
$sum1 = $day1 + $day2 + ...→ 按前面的规律,sum1应该是前4个day相加,sum2是后3个相加,所以参与运算的整数总数是7个。
通用代码实现(自动统计)
总不能每个case都手动写死统计数吧?咱们找规律写个通用逻辑:
观察前面的case能发现,对于$_POST['dni'] = n的情况:
- sum1是前
ceil(n/2)个day变量,只有当这个数量大于1时,才会用加法拼接;否则直接赋值。 - sum2是剩下的
floor(n/2)个day变量,同样数量大于1才用加法,否则直接赋值。
所以参与运算的数量就是:(sum1里参与运算的数量) + (sum2里参与运算的数量),某部分如果是单个变量直接赋值,就不算入统计。
用PHP代码实现的话,可以这样写:
$dni = $_POST['dni']; $operationCount = 0; if ($dni >= 2) { $sum1Count = ceil($dni / 2); $sum2Count = floor($dni / 2); // 只有当变量数>1时,才是参与加减运算的 $operationCount = ($sum1Count > 1 ? $sum1Count : 0) + ($sum2Count > 1 ? $sum2Count : 0); } // 如果你需要兼容switch写法,也可以把这段逻辑放进每个case里,或者直接替代switch的统计部分
咱们验证几个例子:
- 当n=2时:
1+1,都不大于1,总数0 ✔️ - 当n=3时:
2+1,sum1的2>1算2,sum2的1不算,总数2 ✔️ - 当n=7时:
4+3,都大于1,总数7 ✔️
补充说明
如果你的需求其实是统计所有被赋值的整数变量(不管有没有参与加减),那这个数量直接就是n,因为每个case里的sum1和sum2加起来正好覆盖了day1到dayn所有变量。但根据你描述的“参与加减运算”,前面的方案应该更符合你的需求。
内容的提问来源于stack exchange,提问作者Yordan Yordanov
相关产品推荐
相关产品推荐

