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



我试图从下面的数组中生成一个按"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 => 
      ...

所以我想生成这样的伪列表:

  • groupName
    • txt
    • txt
    • txt
  • 下GroupName
    • txt
    • 三种…

我的代码是这样的

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>";
}

但是我得到关于"next()期望参数1是数组,字符串给定"的错误。

我已经尝试了各种不同的语法,但我没有取得多大进展。如何比较嵌套数组中的两个值?

您误解了函数next()的含义:您不能为数组元素查询它。它操作与数组本身绑定在一起的内部数组指针,而不是与数组的某些元素绑定在一起。来自PHP文档:

Every array has an internal pointer to its "current" element, which is initialized to the first element inserted into the array. 

,参见next的描述。

由于foreach循环至关重要地依赖于数组指针的值,打乱数组指针将破坏循环:您可能会看到循环中的每第二个元素,因为在每次迭代中,next()被您的foreach循环调用,然后由您自己调用一次。

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

for ($i = 0; $i < length ($array); $i++)
{
    if ($i == 0 || $array[$i] != $array[$i - 1])
        echo "New group!n";
    echo $array[$i];
}

这并不能直接回答你的问题,但是你最好重组你的数组,这样它们就分组了,你不需要在循环中执行任何逻辑来检查groupName。目前,您依赖于下一个groupName来匹配当前的groupName,但如果它们不是连续的,它们将不会被分组。

你可以这样做:

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

这是一个演示

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

$last = null;
foreach (...) {
    if ($last != $row['current']) {
        // new group
    }
    $last = $row['current'];
    ...
}

相关内容

  • 没有找到相关文章

最新更新