【问题标题】:Echo a comma on all but the last value? (result from mysql_fetch_array)除了最后一个值之外的所有值都回显逗号? (来自 mysql_fetch_array 的结果)
【发布时间】:2012-01-08 21:18:35
【问题描述】:

如何在除最后一个值之外的所有值上回显逗号?这是我的代码:

while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {

    ECHO $servdescarrayrow['serv_desc'].",";
}

这不应该工作吗:

$i = 0;

while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {

    $count = count($servdescarrayrow);
    if ($i < $count) {
    echo $servdescarrayrow['serv_desc'].",";
    $i++;
    }
    else {
        break;
    }
}

【问题讨论】:

  • 您可以使用php.net/manual/en/function.mysql-num-rows.php 之类的东西来跟踪,或者将前置与布尔值结合使用。
  • 您的编辑无效。您计算的是单行数据中的字段,而不是结果集中的总行数。为此,您需要mysql_num_rows($servdescarray))

标签: php


【解决方案1】:
$started = null;
while ($servdescarrayrow = mysql_fetch_array($servdescarray)) 
{
  ECHO $started.$servdescarrayrow['serv_desc'];
  if ( ! isset($started))
  {
    $started = ",";
  }
}

【讨论】:

  • isset($started) 不会总是返回 true 吗?
  • 最好把 $started 改成布尔值。因此,从它为 false 开始,而不是在第一次运行时将其设置为 true,并在它为 true 时添加逗号。 (或者根本不包括 if,而只是将其设置为逗号并将其初始化为空字符串而不是 null。)
  • isset 是最快的比较(周期)
【解决方案2】:

尝试在您的输出中使用rtrim。例如:

$output = '';

while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {    
    $output .= $servdescarrayrow['serv_desc'].",";
}

echo rtrim($output, ',');

【讨论】:

  • implode()相比过于复杂。
  • 怎么样?无论您是启动一个数组并内爆还是启动一个字符串并对其进行修剪.. 代码行数一样多。
  • 复杂的不是行数,而是代码的可管理性。当然,如果这个 sn-p 是我们必须使用的全部,那很好,但作为一种实践——假设你以后想使用不同的分隔符,这种 种类 的解决方案会导致复杂性,更多进行更改的地方并增加了对代码进行良好监督的难度。
【解决方案3】:

这是一种可能的方法。不是很优雅,但能胜任:

$Ix = 0;
while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {
    if ($Ix > 0)
        echo ",";
    $Ix++;
    echo $servdescarrayrow['serv_desc'];
}

【讨论】:

    【解决方案4】:
    $count = 0;
    while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {
        if ($count++ > 0) echo ",";
        echo $servdescarrayrow['serv_desc'];
    }
    

    【讨论】:

    • 这倒退到了 OP 的要求。您正在消除第一个逗号。他想去掉最后一个逗号。
    【解决方案5】:

    这应该可行:

    $i = 0;
    $c = mysql_num_rows ( 
    while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {
        $i++;
        if ( $i < mysql_num_rows ) echo $servdescarrayrow['serv_desc'].",";
        else echo $servdescarrayrow['serv_desc'];
    }
    

    【讨论】:

      【解决方案6】:

      为什么不:

      if ($servdescarryrow = mysql_fetch_array($servdescarray)) {
          echo $servdescarryrow;
      }
      
      while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {
          ECHO ",".$servdescarrayrow['serv_desc'];
      }
      

      【讨论】:

        【解决方案7】:

        您可以在生成字符串后删除最后一个逗号,如下所示:

        $str = '';
        while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {
           $str .= $servdescarrayrow['serv_desc'].",";
        }
        $str = substr($str, 0, strlen($str) - 1);
        echo $str;
        

        【讨论】:

          【解决方案8】:

          另一种选择:

          $values = array();
          while ($servdescarrayrow = mysql_fetch_array($servdescarray)) {
              $values[] = $servdescarrayrow['serv_desc'];
          }
          
          echo implode(',', $values);
          

          【讨论】:

          • “另一种选择”?这是唯一理智的选择,我想。 :)
          • 之后使用 rtrim 重复字符串连接也可以。不知道哪个会更有效,但这通常不是 php 关心的问题。
          • @zrvan 你为什么这么认为?事实上,当你有输入和输出的字符串时涉及一个数组只是多余的。
          • 这似乎还是在末尾加了一个逗号。
          • @andrew:仅当推送的最后一个值中已经包含逗号时。 implode() 只会在两个元素之间放置一个逗号,而不是在最后一个元素之后。
          【解决方案9】:
          $array = array();
          while ($servdescarrayrow = mysql_fetch_array($servdescarray))
              $array[] = $servdescarrayrow['serv_desc'];
          ECHO implode(',', $array);
          

          【讨论】:

            【解决方案10】:
            $out = $mydb->getOne("SELECT group_concat(serv_desc) FROM table");
            

            其中 $mydb 是数据库类,getOne() 是返回第一行的第一个 col 的帮助函数,group_concat() 输出限制为 1024 字节,但可以通过设置适当的变量来更改。

            当然,这个站点的普通爱好者总是会使用通用 PHP 来完成这样的任务,因为没有人会告诉他还有更智能的方法。

            【讨论】:

              【解决方案11】:

              我想知道为什么您的第一个问题有十几个答案而没有人回答编辑的部分。

              不,它不应该工作。因为 $servdescarrayrow 变量只代表 one 行和你,因此整个代码没有意义。

              虽然您可以返回的记录数纳入流程并获得所需的结果,但我怀疑您是否真的需要这样做。

              更不用说你回显的方式,无论如何,你总是会有尾随的逗号。

              【讨论】:

                猜你喜欢
                • 2012-12-03
                • 2011-11-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-10-01
                • 2017-08-02
                • 2015-11-14
                相关资源
                最近更新 更多