我从数据库中获取数据,它返回6行。我对它们进行循环,将它们添加到一个临时数组中,然后每2次迭代将其添加到父数组中,这样我就知道有一个数组,其中子数组按2分组。下面,正如您所看到的,我对6个结果的每个迭代进行了回声处理。我的分组数组只显示2组2,而它应该是3组2。我做错了什么?
注意:我检查了数据,前两组是正确的数据,但最后两行缺失。
// group entries into subgroups of 2
$buffer = array();
$entries = array();
for( $i = 0; $i < $journal_entries_count; $i++ )
{
if( $i % 2 == 0 && $i > 0 )
{
$entries[] = $buffer;
unset( $buffer );
$buffer = array();
}
$buffer[] = $journal_entries[ $i ];
echo $i, '<br />';
}
0
1
2
3
4
5
Array
(
[0] => Array
(
[0] => Array
(
[journal_entry_id] => 196
[journal_entry_date] => 2014-10-24 20:01:44
[scoring_type_id] => 1
[score] => 2662.00
[wod_title] => yyyyy
[wod_date] => 2014-09-12
[strength] =>
[repscheme] =>
[benchmark] => Annie
)
[1] => Array
(
[journal_entry_id] => 197
[journal_entry_date] => 2014-10-24 20:01:44
[scoring_type_id] => 1
[score] => 196.00
[wod_title] => yyyyy
[wod_date] => 2014-09-12
[strength] =>
[repscheme] =>
[benchmark] => Badger
)
)
[1] => Array
(
[0] => Array
(
[journal_entry_id] => 195
[journal_entry_date] => 2014-10-24 20:00:19
[scoring_type_id] => 1
[score] => 300.00
[wod_title] => Koala Bear WOD
[wod_date] => 2014-10-21
[strength] =>
[repscheme] =>
[benchmark] => Amanda
)
[1] => Array
(
[journal_entry_id] => 194
[journal_entry_date] => 2014-10-24 20:00:19
[scoring_type_id] => 7
[score] => 5.20
[wod_title] => Koala Bear WOD
[wod_date] => 2014-10-21
[strength] => Back Squat
[repscheme] => 10RM
[benchmark] =>
)
)
)
解决方案?我还没有把它标记为解决方案,因为我不确定它在所有情况下都能起作用,但在每次迭代时循环,它永远不会碰到最后一次。
0=跳过-添加1=跳过-添加2=添加-添加3=跳过-添加4=添加-添加5=跳过-添加
我添加了$journal_entries_count + 1
,现在结果是正确的。
想法?
如果$journal_entries_count
是6,那么在循环结束时,$buffer
将包含两行,但它不会添加到$entries
中。
您需要添加一个最终
$entries[] = $buffer;
循环之后。或者,您可以使用array_chunk
:
$entries = array_chunk($journal_entries, 2);
你能用一些更简单的代码试试吗。
$entries = array();
$journal_entries[] = 1;
$journal_entries[] = 2;
$journal_entries[] = 3;
$journal_entries[] = 4;
$journal_entries[] = 5;
while (count($journal_entries)){
$entries[] = array_slice($journal_entries,0,2);
$journal_entries = array_slice($journal_entries,2);
}
print_r($entries);
您缺少最后2个条目,因为您没有从最后一个循环中添加缓冲区。
您需要更新代码,在foreach循环之后,检查缓冲区是否为空。如果它不为空,则将其添加到最终数组中。
您说,对于$journal_entries_count+1,它是有效的,因为您实际上又运行了一次循环,并从"true"的最后一个循环中添加了最后一个缓冲区。
结束代码应该是这样的:
$buffer = array();
$entries = array();
for( $i = 0; $i < $journal_entries_count; $i++ ) {
if( $i % 2 == 0 && $i > 0 ) {
$entries[] = $buffer;
unset( $buffer );
$buffer = array();
}
$buffer[] = $journal_entries[ $i ];
echo $i, '<br />';
}
// add any leftover buffer data
if(count($buffer) > 0) {
$entries[] = $buffer;
}