在php中使用foreach循环获取下一个元素值

问题描述

我尝试使用 next() 函数和 foreach 循环返回当前元素值。我正在 foreach 循环中从数据库获取数据。

$result = $wpdb->get_results ( "SELECT * FROM interestclass 
                                where SortingCode='bake1r20210113' || 
                                    SortingCode='bake1r20210225' || 
                                    SortingCode='bake1r20210506' || 
                                    SortingCode='bake1r20210612' || 
                                    SortingCode='bake1r20210813'" );
foreach ( $result as $print )   {   
    $nextRowValue=next(next($result));
    echo "<td> working".$nextRowValue->LessonCode."</td><br>";
} 

解决方法

$wpdb->get_results 返回一个结果集行数组和一个对数组进行的 foreach 处理,因此 foreach 完成向下移动数组的所有操作,您需要做的就是使用 $row 作为当前行您正在处理

$results = $wpdb->get_results ( "SELECT * FROM interestclass 
                                where SortingCode='bake1r20210113' || 
                                    SortingCode='bake1r20210225' || 
                                    SortingCode='bake1r20210506' || 
                                    SortingCode='bake1r20210612' || 
                                    SortingCode='bake1r20210813'" );
foreach ( $results as $row )   {   
    echo "<td> working {$row->LessonCode}</td>";
} 

根据您在下面的评论添加其他代码。

因此,如果您想针对数组中的下一行测试这一行,只需更改 foreach 的格式即可为您提供数组的 key。然后,您可以在 $results 数组上使用它来访问数组中的下一个事件。请注意,这样做很容易超出数组的边界,因此首先您需要检查使用简单的 IF 不会发生这种情况

$results = $wpdb->get_results ( "SELECT * FROM interestclass 
                                where SortingCode='bake1r20210113' || 
                                    SortingCode='bake1r20210225' || 
                                    SortingCode='bake1r20210506' || 
                                    SortingCode='bake1r20210612' || 
                                    SortingCode='bake1r20210813'" );

$resultCount = count($results);

foreach ( $results as $key => $row ) {   
    // first make sure we have a next row
    if ( $key < $resultCount ){
        $nextRow = $results[$key+1];
        if ( $row->LessonCode == $nextRow->LessonCode ) {
            echo "<td> working {$row->LessonCode}</td>";
        }
    }
} 
,

如果你跑 foreach ( $result 作为 $print ) { 程序迭代 $result 数组。在每个循环中 $print 是 $result 的一个元素,所以 next 不是必需的。 我认为代码将是: foreach ( $result 作为 $print ) { echo "working".$print->LessonCode."
";}

我在你的代码中看到你使用 next(next($result)) 它会在数组中跳转 2 个位置,而不是一个。