1

有没有办法让 foreach 首先显示最新内容(降序 ID)?我试过找到,但我无法让它工作。

<?php

include_once('includes/connection.php');
include_once('includes/deal.php');

$deal = new Deal;
$deals = $deal->fetch_all();

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>GameDeals</title>
<link rel="shortcut icon" type="image/x-icon" href="assets/favicon.png">
<link rel="stylesheet" href="assets/deals.css" />
</head>

<body>

<div class="container">
<!-- START GAMEDEALS -->

<?php foreach ($deals as $deal) { ?>

<div class="deal-info">
    <table width="800" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100">ID: <?php echo $deal['deal_id']; ?></td>
        <td width="500"><?php echo $deal['deal_title']; ?></td>
        <td width="200">TS: <?php echo $deal['deal_timestamp']; ?></td>
      </tr>
    </table>
</div>

<div class="deal-content">
    <table width="800" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100"><img src="<?php echo $deal['deal_imageurl']; ?>" width="100" height="100" /></td>
        <td width="400"><?php echo $deal['deal_content']; ?></td>
        <td>
            <table width="300" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td>Regular Price: <?php echo $deal['deal_normalprice']; ?></td>
              </tr>
              <tr>
                <td>Offer Price: <?php echo $deal['deal_offerprice']; ?></td>
              </tr>
              <tr>
                <td>Off: <?php echo $deal['deal_percent']; ?></td>
              </tr>
            </table>
        </td>
      </tr>
    </table>
</div>

<div class="deal-ref">
    <table width="800" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="500">URL: <?php echo $deal['deal_url']; ?></td>
        <td width="300">ENDS: <?php echo $deal['deal_expire']; ?></td>
      </tr>
    </table>
</div>

<?php } ?>
<!-- END GAMEDEALS -->
</div>

</body>
</html>

提前致谢!

更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.更多文本.

4

6 回答 6

2

如果您无法更改 SQL 查询本身,则需要在执行 foreach 之前对数组进行排序。PHP 的内置usort函数非常适合这一点 - 它根据数组的值和用户定义的比较函数对数组进行就地排序:

function compareRows($a, $b)
{
    if ($a['deal_id'] == $b['deal_id']) {
        return 0;
    }
    return ($a['deal_id'] < $b['deal_id']) ? 1 : -1;
}
usort($deals, "compareRows");

$deals然后将按“deal_id”字段降序排列。请记住,这是 MySQL 优化的那种操作,而在 PHP 中这样做效率要低得多。

于 2013-05-16T17:59:55.043 回答
1

Foreach 不会对您的数组进行排序,您需要在从数据库中获取数据的查询中处理它,或者在获取数据之后和 foreach 之前的另一种方法中处理它。

于 2013-05-16T17:54:25.320 回答
1

你应该ORDER BY id DESC在你的SELECTMySQL 语句中使用。

于 2013-05-16T17:54:59.223 回答
1

您可以通过将 mysql 列名放在 sql 查询中的 ORDER BY id DESC 子句之后来获得所需的顺序,即 ASCENDING。

于 2013-05-16T17:55:12.487 回答
1

您正在命名$deal为一个对象,然后将其分配给 assign 是一个数组。IMO,您需要更改$deal为其他内容

于 2013-05-16T17:55:56.707 回答
1

您可以array_reverse用于数组,但对于数据库来源的项目,您应该遵循其他答案之一。这仅在数组按升序排列时才有效

于 2013-05-16T18:02:54.447 回答