PHP多维数组逆序遍历:当前子数组值减后续对应键值
实现方法详解
没问题,我来帮你搞定这个需求!先明确核心逻辑:要从后往前逆序遍历外层数组的子数组,把每个子数组的对应键值,替换成「当前子数组的原数值」减去「它后面紧邻的那个子数组对应键的数值」——最后一个子数组因为后面没有其他子数组了,所以直接保留原数值即可。
完整代码实现(PHP7+)
<?php $myarray = array( array(0 => 0, 1 => 70, 2 => 19, 3 => 0), array(0 => 0, 1 => 24, 2 => 14), array(0 => 0, 1 => 15, 2 => 11, 3 => 0), array(0 => 0, 1 => 15, 2 => 27, 3 => 0) ); // 从倒数第二个子数组开始逆序遍历(最后一个子数组无需处理) for ($i = count($myarray) - 2; $i >= 0; $i--) { $currentSub = $myarray[$i]; $nextSub = $myarray[$i + 1]; // 遍历当前子数组的所有键值对 foreach ($currentSub as $key => $originalValue) { // 用空合并运算符处理子数组长度不一致的情况:后面子数组没有对应键则用0计算 $myarray[$i][$key] = $originalValue - ($nextSub[$key] ?? 0); } } // 输出结果验证 print_r($myarray); ?>
代码解释
- 遍历起点选择:
count($myarray)-2是倒数第二个子数组的索引,因为最后一个子数组(索引3)后面没有后续数组,不需要修改,所以从它前面的子数组开始往前遍历。 - 处理子数组长度不一致:用
$nextSub[$key] ?? 0确保如果后面的子数组没有当前键(比如第二个子数组没有键3),不会报错,直接用0作为差值计算的基数。 - 值替换逻辑:直接在原数组上修改,把当前子数组的每个键值替换成「原值 - 后续子数组对应键值」。
兼容PHP5.x的版本
如果你的PHP版本低于7,不能使用空合并运算符,可以换成isset()判断:
foreach ($currentSub as $key => $originalValue) { $nextValue = isset($nextSub[$key]) ? $nextSub[$key] : 0; $myarray[$i][$key] = $originalValue - $nextValue; }
运行结果示例
执行代码后,最终的数组会是:
Array ( [0] => Array ( [0] => 0 [1] => 46 [2] => 5 [3] => 0 ) [1] => Array ( [0] => 0 [1] => 9 [2] => 3 ) [2] => Array ( [0] => 0 [1] => 0 [2] => -16 [3] => 0 ) [3] => Array ( [0] => 0 [1] => 15 [2] => 27 [3] => 0 ) )
内容的提问来源于stack exchange,提问作者Cananau Cristian
相关产品推荐
相关产品推荐

