如果已解决此问题,我深表歉意-我整天都在搜寻,没有找到任何满足我需求的东西。

我在php中有一个foreach循环,重复了信息恶心,我不确定如何解决它。我尝试了分组,array_unique等,但没有找到解决方案。当考虑所有变量时,没有一行是另一行的真实重复。

我有一张桌子,每行代表一张中奖彩票。每行都有唯一的ID,日期,层(1,2,3)和其他一些有价值的信息变量。我想按日期组织此事件,按等级编号升序,其中日期仅列出一次,而每张票证仅列出一次。现在,每一行都被列为票证,但重复多次。这是我的代码-我删除了两者之间的显示,因为它们可以正常工作:

$selectResults = "SELECT * FROM mytable WHERE YEAR(date) = 2014 ORDER BY date DESC, tier ASC";
$getResults = @mysqli_query($connect, $selectResults) or die('query error: ' . mysqli_error($connect));
if(mysqli_num_rows($getResults) == 0){
    echo "There are no tickets to display.";
}else{
echo "<table><tr><th>Date</th><th>Tier</th><th>Points</th><th>Prize Amount</th></tr>";
while($row = mysqli_fetch_array($getResults)){
extract($row);
foreach($row as $ticket => $date){
    echo "<tr><td>" . date('n/j/Y', strtotime($date)) . "</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
    if (1 == $tier)
        {
        (Display Tier 1 tickets for date)
        }
    if (2 == $tier)
        {
        (Display Tier 2 tickets for date)
        }
    if (3 == $tier)
        {
        (Display Tier 3 tickets for date)
        }
            }
    echo "<tr class='bottomRow'><td colspan='4' /></tr>";

}
echo "</table>";

最佳答案

摆脱foreach循环:

foreach ($row as $ticket => $date)


您已经使用while循环遍历了行。 $row仅包含一行,每一列都是数组的元素。

您的代码应如下所示:

$last_date = null;
while ($row = mysqli_fetch_assoc($getResults)) {
    extract($row);
    if ($date != $last_date {
        echo "<tr><td>" . date('n/j/Y', strtotime($date)) . "</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>";
        $last_date = $date;
    }
    // Display ticket details
}

07-24 09:50
查看更多