【问题标题】:get next element value using foreach loop in php在php中使用foreach循环获取下一个元素值
【发布时间】:2021-08-25 07:34:07
【问题描述】:

我已经尝试在 foreach 循环中使用 next() 函数返回当前元素值。我正在 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>";
} 

【问题讨论】:

  • [From cmets under a given answer] “其实我想得到下一节课代码的值,这样我就可以比较这个值并中断” - 用另一种方式那时左右。将当前记录的值与上一个记录的值进行比较。要访问后者,您不需要调用任何与数组指针混淆的函数(危险的事情,在同一个数组的循环内),您需要做的就是存储 current 在循环的最后记录到一个变量中,这样你就可以在下一次循环迭代中访问它。

标签: php database foreach next


【解决方案1】:

$wpdb-&gt;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>";
        }
    }
} 

【讨论】:

  • 其实我想得到下一节课代码的值,这样我就可以比较值和break。
  • 查看附加代码。不确定你想要测试什么,相等或不相等,但这应该给你一个很好的起点
  • 在这里使用for循环不是更好吗,因为这段代码假定键是有序的和数字的?
  • @DB 不记得我上次使用 for 循环处理数组的内容是什么时候了。但当然可以,但更好对此不确定
  • @RiggsFolly 这正是我使用 for 循环的唯一用例。海事组织,它使您更清楚地了解您正在发生的事情。但如果数组没有数值或结果是生成器,这两种变体都会失败。
【解决方案2】:

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

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

【讨论】:

  • 它甚至没有跳到一个地方。我只是在测试它是否有效。
猜你喜欢
  • 2011-07-03
  • 2020-04-10
  • 1970-01-01
  • 2013-05-17
  • 2019-04-29
  • 2019-12-05
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多