Php 获取上一个数组值

Php 获取上一个数组值,php,mysql,arrays,Php,Mysql,Arrays,我正在制作一个php聊天系统,我想为每天添加一个标题 为了实现这一点,我需要一种从数据库中获取当前消息日期和上一个消息日期的方法,以便在if语句中使用它们: <?php if ($dtdate != $dtdateprev) : ?> 我在获取上一次报名日期时遇到问题 为了获得这些值,我使用以下方法: <?php $sql=mysql_query("SELECT * FROM test"); while($row=mysql_fetch_array($sql)) {

我正在制作一个php聊天系统,我想为每天添加一个标题

为了实现这一点,我需要一种从数据库中获取当前消息日期和上一个消息日期的方法,以便在if语句中使用它们:

<?php if ($dtdate != $dtdateprev) : ?>

我在获取上一次报名日期时遇到问题

为了获得这些值,我使用以下方法:

<?php
$sql=mysql_query("SELECT * FROM test");
while($row=mysql_fetch_array($sql)) {
    $dtval=$row['dtdate'];
    $dtvalprev= **???**;
    $dtdate=date_format(new DateTime($dtval), "D d M Y");
    $dtdateprev=date_format(new DateTime($dtvalprev), "D d M Y");
?>
<?php if ($dtdate != $dtdateprev) : ?>
<div>Example Header</div>
<?php endif; ?>
<div>Example Message Body</div>
<?php } ?>

示例标题
示例消息体
所以我需要一些$dtvalprev的帮助!提前谢谢。

试试这个

<?php
$sql=mysql_query("SELECT * FROM test");
$dtvalprev= '';//previous value initially blank
while($row=mysql_fetch_array($sql)) {
    $dtval=$row['dtdate'];

    $dtdate=date_format(new DateTime($dtval), "D d M Y");
    if($dtdateprev)// check previous value should not blank
        $dtdateprev=date_format(new DateTime($dtvalprev), "D d M Y");

    ?>
    <?php if ($dtdate != $dtdateprev) : ?>
        <div>Example Header</div>
    <?php endif; ?>
    <div>Example Message Body</div>
    <?php 
    $dtdateprev=$dtval;// re-assign the current value
}
?>

示例标题
示例消息体

您可以通过查询获得上一个日期:

select t.*,
       (select dtdate
        from test t2
        where t2.dtdate < t.dtdate
        order by dtdate desc
        limit 1
       ) as prevdtdate
from test t;

使用PHP中的逻辑来记住前一个值。

只是一个旁注,MySqL**函数将被表示为PHP5.5.0+,您应该考虑使用PDO或MyQuiL**作为第二个条目和下面的值,$dtDATEPRV用于在ECHO中打印当前日期而不是以前的值。对于第一种情况,它应该是空的。有什么想法吗?没有,如果您
echo
dtdateprev,那么它将给出
previous值
我已经替换了
示例消息体

,我得到以下信息:
示例消息头2012年10月26日星期五13:08:31

示例消息头2012年10月27日星期六14:02:09

示例消息头2013年8月6日星期二13:00:09

示例消息头2012年11月5日星期一12:02:11

2013年8月6日星期二13:00:09

示例标题2012年11月5日星期一12:04:54

2013年8月6日星期二13:00:09

。我还将日期格式更改为“D D M Y H:I:s”。
select t.*
from test t
order by dtdate;