我正在尝试制作一个按" 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>";
}
但我收到错误&#34; next()期望参数1为数组,字符串为&#34;。
我尝试过各种不同的语法,但我没有取得多大进展。如何比较嵌套数组中的两个值?
答案 0 :(得分:1)
您误解了函数next()
的含义:您无法查询数组元素。它操纵与数组本身绑定的内部数组指针,而不是它的一些元素。来自the PHP documentation:
Every array has an internal pointer to its "current" element, which is initialized to the first element inserted into the array.
由于foreach
循环关键取决于数组指针的值,弄乱数组指针会破坏循环:你可能会看到循环中的每个第二个元素,因为每次迭代都会{{1}你的next()
循环调用,然后自己调用一次。
最简单的事情可能是使用旧的foreach
循环:
for
答案 1 :(得分:1)
这不会直接回答您的问题,但您最好重新组合阵列,以便将它们分组,并且您不需要在循环内执行任何逻辑来检查groupName
。目前,您依靠下一个groupName
来匹配当前的groupName
,但如果它们不是连续的,则不会对它们进行分组。
你可以这样做:
$output = array();
foreach ($datafeed as $feed) {
$output[$feed['groupName']][] = $feed;
}
答案 2 :(得分:0)
你不应该在next
循环中使用foreach
,因为你会得到冲突的数组指针移动。只需存储最后的值:
$last = null;
foreach (...) {
if ($last != $row['current']) {
// new group
}
$last = $row['current'];
...
}