Php 如何在多维数组中获取下一个值

Php 如何在多维数组中获取下一个值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我试图从下面的数组中生成一个按“groupName”分组的HTML列表 array (size=30) 0 => array (size=4) 'groupOrder' => string '1' (length=1) 'groupName' => string 'Class' (length=11) 'txt' => string '............' (length=32) 'ID' => s

我试图从下面的数组中生成一个按“groupName”分组的HTML列表

array (size=30)
  0 => 
    array (size=4)
      'groupOrder' => string '1' (length=1)
      'groupName' => string 'Class' (length=11)
      'txt' => string '............' (length=32)
      'ID' => string '6' (length=1)
  1 => 
    array (size=4)
      'groupOrder' => string '1' (length=1)
      'groupName' => string 'Size' (length=11)
      'txt' => string '..................' (length=34)
      'ID' => string '6' (length=1)
  2 => 
      ...
所以我想生成类似于这个伪列表的东西:

  • 组名
    • 文本
    • 文本
    • 文本
  • 下一个组名
    • 文本
    • 文本
所以我的代码看起来像这样

foreach ($datafeed as $val => $row) {
       if (($datafeed[$val]['groupName']) == next($datafeed[$val]['groupName'])) {
           //same group - do nothing
       } else {
            echo $datafeed[$val]['groupName'];
       }

       echo "<li>".$row['txt']. "</li>";
}
foreach($valdatafeed=>$row){
if($datafeed[$val]['groupName'])==next($datafeed[$val]['groupName'])){
//同一组-什么也不做
}否则{
echo$datafeed[$val]['groupName'];
}
回显“
  • ”$row['txt']。“
  • ”; }
    但我得到的错误是“next()期望参数1是数组,字符串是给定的”


    我尝试过各种不同的语法,但进展不大。如何比较嵌套数组中的两个值?

    无论如何,您不应该在
    foreach
    循环中使用
    next
    ,因为您将得到冲突的数组指针移动。只需存储最后一个值:


    您误解了函数
    next()
    的含义:您无法在其中查询数组元素。它操纵与数组本身绑定的内部数组指针,而不是与数组的某些元素绑定。发件人:

    另请参见

    由于
    foreach
    循环主要取决于数组指针的值,因此弄乱数组指针将破坏循环:您可能会看到循环中的每一个第二个元素,因为在每次迭代中,您的
    foreach
    循环调用一次
    next()
    ,然后您自己调用一次

    对您来说,最简单的事情可能是使用旧的good
    for
    循环:

    for ($i = 0; $i < length ($array); $i++)
    {
        if ($i == 0 || $array[$i] != $array[$i - 1])
            echo "New group!\n";
    
        echo $array[$i];
    }
    
    ($i=0;$i { 如果($i==0 | |$array[$i]!=$array[$i-1]) 回显“新组!\n”; echo$array[$i]; }
    这并不能直接回答您的问题,但您最好重新构造阵列以便对它们进行分组,并且不需要在循环中执行任何逻辑来检查
    组名。目前,您依靠下一个
    groupName
    来匹配当前的
    groupName
    ,但如果它们不是连续的,则不会对它们进行分组

    你可以这样做:

    $output = array();
    foreach ($datafeed as $feed) {
        $output[$feed['groupName']][] = $feed;
    }
    

    谢谢你。。。非常感谢,这是非常有用的一点,尽管在本例中,我负责提供数据的SQL查询中的分组。
    for ($i = 0; $i < length ($array); $i++)
    {
        if ($i == 0 || $array[$i] != $array[$i - 1])
            echo "New group!\n";
    
        echo $array[$i];
    }
    
    $output = array();
    foreach ($datafeed as $feed) {
        $output[$feed['groupName']][] = $feed;
    }