首页 > 编程 > Ecms

判断echo后循环最后一个值不带,英文逗号

admin Ecms 2022-02-21 12:10:18 0 0
<?php
$json = array();
$sql=$empire->query("select * from {$dbtbpre}ecms_news where classid=4 order by lastdotime DESC limit 9999999999");
while($r=$empire->fetch($sql))//循环获取查询记录
{
        $json[] = array(
                'b' => $r['title'],
                'm' => $r['smalltext'],
                'u' => $r['titleurl'],
                't' => $r['titlepic']
        );
}
        echo json_encode($json);

?>
json_encode — 对变量进行 JSON 编码
返回值:
成功则返回 JSON 编码的 string 或者在失败时返回 FALSE 。

一行简化:
<?php
$data=$empire->query("select `title` as `b`,`smalltext` as `m`,`titleurl` as `u`,`titlepic` as `t` from {$dbtbpre}ecms_news where classid='4' order by lastdotime DESC");
        echo json_encode($data);

?>
太牛了,大神

我后来自己想了个笨办法
[e:loop={'select * from [!db.pre!]ecms_news where classid=4 order by lastdotime DESC limit 9999999999',22,24,0}]
<?php
$num=$empire->num("select id from {$dbtbpre}ecms_news where classid=4");
if($bqno==$num){$class="";}else{$class=",";}
?>

        {
            "b": "<?=DoTitleFont($bqr[titlefont],esub($bqr[title],12,'...'))?>",
            "m": "<?=esub($bqr[smalltext],87,'...')?>",
            "u": "<?=$bqsr['titleurl']?>",
            "t": "<?=$bqr[titlepic]?>"
        }<?=$class?>
[/e:loop]
狗尾续貂,多谈谈。

在循环中,涉及字符串拼接的时候,那个间隔符(在楼主的例子里是逗号),不希望在最后出现,解决方法有这么几种:

1.事后去掉

2,3楼的大神,都给出了方法。他们说:可以用rtrim() 函数移除字符串右侧的空白字符或其他预定义字符。

2.事前判断

这有两种方法,前端判断和后端判断。

后端判断,需要知道谁是最后一条记录。在记录数不确定的时候,就要增加一条查询,取得记录数。楼主想到了这个笨方法:
<?php
$num=$empire->num("select id from {$dbtbpre}ecms_news where classid=4");?>
[e:loop={'select * from [!db.pre!]ecms_news where classid=4 order by lastdotime DESC',0,24}]
<?php
if($bqno==$num){$class="";}else{$class=",";}
?>

        {
            "b": "<?=DoTitleFont($bqr[titlefont],esub($bqr[title],12,'...'))?>",
            "m": "<?=esub($bqr[smalltext],87,'...')?>",
            "u": "<?=$bqsr['titleurl']?>",
            "t": "<?=$bqr[titlepic]?>"
        }<?=$class?>
[/e:loop]
前端判断,似乎是个脑筋急转弯,的确比后端判断简练:
[e:loop={'select * from [!db.pre!]ecms_news where classid=4 order by lastdotime DESC',0,24}]
<?php
if($bqno==1){$class="";}else{$class=",";}
?>

        <?=$class?>{
            "b": "<?=DoTitleFont($bqr[titlefont],esub($bqr[title],12,'...'))?>",
            "m": "<?=esub($bqr[smalltext],87,'...')?>",
            "u": "<?=$bqsr['titleurl']?>",
            "t": "<?=$bqr[titlepic]?>"
        }
[/e:loop]
3.使用数组

使用数组记录数据,最后再拼接,想到即可做到 大神在4楼给出了方法,非常简练清晰。

他最后提到了一行简化,在mysql级别对数据做了封装,如果字段数据不需要提别处理的话,的确简练。另外就是他这个一行代码有点bug,正确的应该是这样的:
<?php
$json = array();
$sql=$empire->query("select `title` as `b`,`smalltext` as `m`,`titleurl` as `u`,`titlepic` as `t` from {$dbtbpre}ecms_news where classid=4 order by lastdotime DESC");
while($r=$empire->fetch($sql))$json[] =$r;
echo json_encode($json);
?>
php中,不用循环,我们无法一次性取得数据表的查询结果。好在今天,pdo提供了fetch_all方法取得所有行。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文(共有 0 条评论)

评论