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

PHP中如何在foreach循环中获取前一个键对应的行值?

如何在foreach循环中获取上一行的值?

嘿,这事儿不难!我来给你捋清楚怎么改代码~

你现在有个从SQL查出来的数组,结构是每行包含ID、Code、Numb,数据是三行:1 | 1 | 1、2 | 2 | 2、3 | 3 | 3,原来的foreach只能输出当前行的code,想要拿到上一行的值,有两种靠谱的方法:


方法一:用变量存上一行数据(通用所有数组类型)

这种方法不管你的数组键是不是连续数字都能用,很稳妥。思路就是在循环外先声明一个变量,用来保存上一行的内容,每次循环里先用上一行的数据,再把当前行的数据存进去留给下一次循环用:

// 初始化上一行变量,第一行没有上一行,所以默认设为null
$prevRow = null;

foreach($array as $key => $val) {
    // 不是第一行的话,就输出上一行的Code
    if ($prevRow !== null) {
        echo "上一行Code:" . $prevRow['code'] . "<br>";
    }
    // 也可以输出当前行的Code做对比
    echo "当前行Code:" . $val['code'] . "<br>";
    
    // 更新上一行变量为当前行,供下一次循环使用
    $prevRow = $val;
}

运行这段代码的话,输出会是:

当前行Code:1
上一行Code:1
当前行Code:2
上一行Code:2
当前行Code:3

这样就完美实现啦,第一行因为没有上一行,所以只输出当前行,从第二行开始就能拿到前一行的值了。


方法二:通过数组键直接访问(适合索引连续的数组)

如果你的数组是标准的索引数组(键是0、1、2这种连续数字),那也可以直接用当前键减1来获取上一行:

foreach($array as $key => $val) {
    // 检查上一个键是否存在(避免第一行出现undefined的问题)
    if (isset($array[$key - 1])) {
        echo "上一行Code:" . $array[$key - 1]['code'] . "<br>";
    }
    echo "当前行Code:" . $val['code'] . "<br>";
}

这种方法更直接,但要注意如果数组的键不是连续的(比如从数据库查出来的数组键是ID值,或者被打乱过),那$key -1可能就找不到对应的元素了,所以第一种方法通用性更强。


内容的提问来源于stack exchange,提问作者Fahad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:28:38