【问题标题】:How can I easily remove the last comma from an array?如何轻松删除数组中的最后一个逗号?
【发布时间】:2011-04-16 14:32:48
【问题描述】:

假设我有这个:

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");

foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}

回声"john-doe,foe-bar,oh-yeah,"

如何去掉最后一个逗号?

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    一种方法是使用substr

    $array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
    
    $output = "";
    foreach($array as $i=>$k)
    {
        $output .= $i.'-'.$k.',';
    }
    
    $output = substr($output, 0, -1);
    
    echo $output;
    

    另一种方法是使用implode

    $array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
    
    $output = array();
    foreach($array as $i=>$k)
    {
        $output[] = $i.'-'.$k;
    }
    
    echo implode(',', $output);
    

    【讨论】:

      【解决方案2】:

      您也可以将rtrim 函数用作:

      $result = '';
      foreach($array as $i=>$k) {
          $result .= $i.'-'.$k.',';
      }
      $result = rtrim($result,',');
      echo $result;
      

      【讨论】:

      • 是的,忘了修剪。 +1
      • 太糟糕了 php 不支持unset($result[strlen($result)-1])。那就太好了……
      • @NullUserException: 嗯,但你可以做到string[0] = 'a'。所以你可以改变它们。只有取消设置字符串偏移是不可能的。这对我来说没有意义,因为字符串支持除unset (offsetUnset) 之外的所有数组操作(offsetGetoffsetSetoffsetExists)。
      • @niki 我不会将取消设置任意偏移量称为数组操作。如果是最后一个,是的;但是根据最小惊讶的原则,您不希望它支持取消设置最后一个元素而不是其他元素。
      • @Daniel k:你会怎么称呼它?这是ArrayAccess 接口定义的操作之一。这些恕我直言是数组操作;)
      【解决方案3】:

      在 foreach 条件之后尝试此代码,然后 echo $result1

      $result1=substr($i, 0, -1);
      

      【讨论】:

        【解决方案4】:

        我根本不喜欢这种使用 substr 的想法,因为这是糟糕的编程风格。这个想法是连接所有元素并通过特殊的“分离”短语将它们分开。为此调用子字符串的想法就像使用激光射击鸟一样。

        在我目前正在处理的项目中,我们试图摆脱编码中的不良习惯。这个样本被认为是其中之一。我们强迫程序员这样写代码:

        $first = true;
        $result = "";
        foreach ($array as $i => $k) {
          if (!$first) $result .= ",";
          $first = false;
          $result .= $i.'-'.$k;
        }
        echo $result;
        

        这段代码的目的比使用 substr 的代码要清楚得多。或者您可以简单地使用 implode 函数(我们的项目是用 Java 编写的,所以我们必须设计自己的函数来以这种方式连接字符串)。只有当你真正需要它时,你才应该使用 substr 函数。这里应该避免这种情况,因为这是不良编程风格的标志。

        【讨论】:

        • 这是不良编程风格的标志吗?您介意为我们所有人详细说明吗?据我所知,它不会影响性能。我可以理解清晰的部分,但同时不难阅读 substr 的作用来弄清楚它。谢谢!
        • 恕我直言,每个工具都应该在程序中适当地使用,并且它不是用于字符串连接的 substr 目的,它是为其他问题而设计的。此外,这个带有 substr 的代码只有在一个地方才显得清晰。如果有很多这样的片段,代码就会变得不可读。因此在我们的项目中,我们改为普通连接,并为此做了一个特殊的功能。现在处理字符串的项目部分更具可读性。
        • 非常感谢您提供这个伟大而专业的解决方案。 (y)
        【解决方案5】:

        我总是用这个方法:

        $result = '';
        foreach($array as $i=>$k) {
            if(strlen($result) > 0) {
                $result .= ","
            }
            $result .= $i.'-'.$k;
        }
        echo $result;
        

        【讨论】:

        • 为此使用 strlen 是个坏主意。请参阅 Joel Spolsky “回归基础”一文以了解原因。只需使用布尔标志来执行此类检查,因为在最坏的情况下(数组有 N 个元素 - 单个字符)您最终会得到 O(N^2) 复杂度。
        • 一般来说,不要为了达到某种效果而使用字符串函数,这可以通过简单的编程技巧轻松实现(使用 substr 去除最后一个逗号也是如此 -最好不要生成最后一个命令)。
        【解决方案6】:

        我不喜欢以前的所有食谱。

        Php 不是 C 语言,并且有更高级别的方法来处理这个特殊问题。

        我将从你有这样一个数组的地方开始:

        $array = array('john-doe', 'foe-bar', 'oh-yeah');
        

        您可以使用循环或 array_map() 函数从初始数组构建这样一个数组。请注意,我使用的是单引号字符串。如果您没有需要替换的变量名,这是一个微优化。

        现在你需要从这个数组生成一个 CSV 字符串,可以这样做:

        echo implode(',', $array);
        

        【讨论】:

        • 这种方法的好处是我们可以更轻松地更改分隔符。此外,您可以稍后将字符串分解为数组,类似于此。不确定性能缺点
        • 我也更喜欢这个。如果没有必要,不要循环。
        • 显然您甚至没有阅读所有以前的食谱,因为 premiso 已经建议了这一点。
        • 这是我建议的,但是我没有使用array_map功能,但感谢 Captaintokyo。 @Powertieke,它确实循环,因为array_map() 必须循环遍历数据。我认为 OP 发布的数组只是他在其他地方获得的数据的演示。
        【解决方案7】:

        这样就可以了:

        rtrim ($string, ',')
        

        【讨论】:

          【解决方案8】:

          假设数组是一个索引,这对我有用。我循环 $i 并针对 $key 测试 $i。当键结束时,逗号不打印。请注意,IF 有两个值,以确保第一个值的开头没有逗号。

          foreach($array as $key => $value)
          {
              $w = $key;
              //echo "<br>w: ".$w."<br>";// test text
              //echo "x: ".$x."<br>";// test text
              if($w == $x && $w != 0 )
              {
              echo ", ";
              }
              echo $value;
              $x++;
          }
          

          【讨论】:

            【解决方案9】:

            看这个例子你就很容易理解了

            $name = ["sumon","karim","akash"];
            foreach($name as $key =>$value){
             echo $value;
             if($key<count($name){
                 echo ",";
             }
            }
            

            【讨论】:

            • 应该是 $key + 1 或 count($name) - 1。
            【解决方案10】:

            我使用数组的最后一个键从数组的最后一个值中删除了逗号。希望这会给你一些想法。

               $last_key =  end(array_keys($myArray));
                                       foreach ($myArray as $key => $value ) {
                                          $product_cateogry_details="SELECT * FROM `product_cateogry` WHERE `admin_id`='$admin_id' AND `id` = '$value'";
                                              $product_cateogry_details_query=mysqli_query($con,$product_cateogry_details);
                                              $detail=mysqli_fetch_array($product_cateogry_details_query);
            
                                              if ($last_key == $key) {
                                                echo $detail['product_cateogry'];
                                              }else{
                                                echo $detail['product_cateogry']." , ";
                                              }
            
                                      }
            

            【讨论】:

              猜你喜欢
              • 2014-09-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-09-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多