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
相关产品推荐
相关产品推荐

