You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
?>

代码解释

  1. 遍历起点选择:count($myarray)-2是倒数第二个子数组的索引,因为最后一个子数组(索引3)后面没有后续数组,不需要修改,所以从它前面的子数组开始往前遍历。
  2. 处理子数组长度不一致:用$nextSub[$key] ?? 0确保如果后面的子数组没有当前键(比如第二个子数组没有键3),不会报错,直接用0作为差值计算的基数。
  3. 值替换逻辑:直接在原数组上修改,把当前子数组的每个键值替换成「原值 - 后续子数组对应键值」。

兼容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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:05:43