为foreach语句中的行设置if语句

时间:2016-10-27 13:56:14

标签: php json if-statement foreach

我无法弄清楚如何执行以下操作:

我在我的php文件中发送JSON数据以显示,唯一的问题是这一行:

$html .= '<img class="home-comment-profile-pic" src="'.$row['img'].'">';

这是一个问题的原因是因为它只检查数据库中的个人资料图片。那么,我创建用户的系统将具有其原始默认图像或他们上载的图像。所以,这个问题是如果有一个默认图像,那么它们就没有从数据库中提取的图像。所以我试图找出检查$row['img']的方法,如果没有,则显示默认值。

默认图像的映射方式如下:<img class="home-profile-pic" src="profile_images/default.jpg">

我能在foreach下面有一个if语句,然后为此设置一个变量吗?如果是这样,怎么样?

foreach ($rows as $row) {
                    $html = "";
                    //$html .= '<div class="comment-post-box">';
                    $html .= '<div class="comment-post-box" id="comment-'.$row['id'].'">';
                    $html .= '<img class="home-comment-profile-pic" src="'.$row['img'].'">';
                    $html .= '<div class="comment-post-username">'.$row['username']. '</div>';
                    $html .= '<div>'.$row['date']. '</div>';
                    $html .= '<div class="comment-post-text">'.$row['comment']. '</div>';
                    $html .= '</div>';
                    $data = array('id' => $row['id'], 'date' => $row['date'], 'html' => $html);
                    $comments[] = $data;
            }

修改

$user = new User();

        //Get the last insert id
            $select_comments_sql = "
            SELECT c. *, p.user_id, p.img
            FROM home_comments AS c
            INNER JOIN (SELECT max(id) as id, user_id 
                        FROM profile_img 
                        GROUP BY user_id) PI
              on PI.user_id = c.user_id
            INNER JOIN profile_img p
              on PI.user_id = p.user_id
             and PI.id = p.id
            ORDER BY c.id DESC
        ";

        if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
            $select_comments_stmt->execute();
            $rows = $select_comments_stmt->fetchAll(PDO::FETCH_ASSOC);
            $comments = array();
            foreach ($rows as $row) {
                    $html = "";
                    $html .= '<div class="comment-post-box" id="comment-'.$row['id'].'">';
                    //$html .= '<img class="home-comment-profile-pic" src="'.$row['img'].'">';
                    $html .= sprintf(
                        '<img class="home-comment-profile-pic" src="%s">',
                        empty($row['img']) ? 'profile_images/default.jpg' : $row['img']
                    );
                    $html .= '<div class="comment-post-username">'.$row['username']. '</div>';
                    $html .= '<div>'.$row['date']. '</div>';
                    $html .= '<div class="comment-post-text">'.$row['comment']. '</div>';
                    $html .= '</div>';
                    $data = array('id' => $row['id'], 'date' => $row['date'], 'html' => $html);
                    $comments[] = $data;
            }
        }
                echo json_encode($comments);

2 个答案:

答案 0 :(得分:3)

&#34;三元运算符&#34;在这种情况下非常方便:

$html .= sprintf(
    '<img class="home-profile-pic" src="%s">',
    empty($row['img']) ? 'profile_images/default.jpg' : $row['img']
);

如果你真的需要使用两个不同的类,你当然可以扩展这种方法:

$html .= sprintf(
    '<img class="%s" src="%s">',
    empty($row['img']) ? 'home-profile-pic' : 'home-comment-profile-pic',
    empty($row['img']) ? 'profile_images/default.jpg' : $row['img']
);

三元运算符记录在其他比较运算符php implements:http://php.net/manual/en/language.operators.comparison.php

答案 1 :(得分:2)

当然,您只需检查$row['img']是否有值。例如,如果它是空的:

if (trim($row['img']) == '') {
    $html .= '<img class="home-profile-pic" src="profile_images/default.jpg">';
} else {
    $html .= '<img class="home-comment-profile-pic" src="'.$row['img'].'">';
}