检查foreach循环中下一个对象中是否存在值

时间:2018-09-23 08:44:59

标签: php mysql

首先,感谢您抽出宝贵的时间阅读本文。 我的问题是,如何检查foreach循环中对象中是否存在值到目前为止,我已经做到了。

SQL查询以获取消息和值以检查每行之间的分钟差异(以检查用户是否在一分钟内发布消息,以便我可以在该组的最后一条消息的末尾显示个人资料图片)

"SELECT *,id, sentOn, timestampdiff(minute,sentOn,(SELECT sentOn FROM messages t2 WHERE t2.id < t1.id ORDER BY t2.id DESC LIMIT 1)) AS diff FROM messages t1" 

只需检索消息

$stmt = $this->db->prepare($sql);
        $stmt->execute();
        $messages = $stmt->fetchAll(PDO::FETCH_OBJ); 

并显示消息

foreach ($messages as $user) {
    $next = next($messages);

    echo 'User: '.$user->message.'<br/>'.((@$next->diff != '0') ? 'Profile image. chats ends at SUN 12:20 PM<br/><br/>' : '');
}

Here's result 
Jon: Hi
Jon: hello
Profile image. 
Chats end at SUN 12:20 PM

Jon: hello?
Profile image. 
Chats end at SUN 12:20 PM

Jon: remember me?
Profile image. 
Chats end at SUN 12:20 PM

很抱歉,如果这看起来令人困惑,请让我解释一下,以便检查消息是否是该组中的最后一条消息(在查询上方),然后在此方法执行的消息末尾显示个人资料图片。但是,如果我在循环中从$ next-> diff中删除@,它将抛出 get非对象的属性'diff'

1 个答案:

答案 0 :(得分:2)

您应该检查$next是否存在。例如,如果可以使用empty完成

(!empty($next) && $next->diff != '0') 
    ? 'Profile image. chats ends at SUN 12:20 PM<br/><br/>' : ''