【问题标题】:Converting MySQL results into comma separated values将 MySQL 结果转换为逗号分隔值
【发布时间】:2011-08-11 18:23:42
【问题描述】:

我有一个 mysql 语句会产生一堆结果。我想用逗号分割每个结果,除了最后一个结果。我在想我需要一个 for 循环,但我不太确定如何去做。我应该将结果作为数组获取并循环遍历它们吗?我在想我应该计算行数,然后当 for 达到最后一个结果时,它不使用逗号。

我已经习惯了使用while 来获得结果,以至于我有点像个菜鸟。如有任何建议,我将不胜感激。

显然行不通,因为最后一个结果会有逗号。

$sql = 'SELECT * FROM tags WHERE vid_id=?';
$stmt_tags = $conn->prepare($sql);
$result=$stmt_tags->execute(array($vid_id));
$tag_count=$stmt_tags->rowCount();
while ($row = $stmt_tags->fetch(PDO::FETCH_ASSOC)) {

    $tags=htmlspecialchars( $row['name'], ENT_NOQUOTES, 'UTF-8' );
    $tags=$tags.',';
    echo $tags;

}

提前致谢。

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    $tags = array();
    while ($row = $stmt_tags->fetch(PDO::FETCH_ASSOC)) {
        $tags[] =htmlspecialchars( $row['name'], ENT_NOQUOTES, 'UTF-8' );
    }
    echo implode(',', $tags);
    

    【讨论】:

      【解决方案2】:

      将它们全部放在一个临时数组中并使用 implode()

      implode(',',$array);
      

      【讨论】:

        【解决方案3】:
        $alldata = $stmt_tags->fetchAll(PDO::FETCH_ASSOC);
        $tags = implode(',' array_map(function($row){
            htmlspecialchars( $row['name'], ENT_NOQUOTES, 'UTF-8' );
        },$alldata));
        

        【讨论】:

        • 我喜欢匿名函数 :)
        【解决方案4】:

        并且没有 implode() - 为了完整起见 - 只需添加逗号 before;第一行比最后一行更容易分辨:

        <?php
        
        $tags = '';
        $first = TRUE;
        while ($row = $stmt_tags->fetch(PDO::FETCH_ASSOC)) {
            if($first){
                $first = FALSE;
            }else{
                $tags .= ', ';
        
            }
            $tags .= htmlspecialchars( $row['name'], ENT_NOQUOTES, 'UTF-8' );
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-14
          • 1970-01-01
          • 1970-01-01
          • 2020-12-20
          • 2012-06-18
          • 1970-01-01
          相关资源
          最近更新 更多