【问题标题】:Replace the last comma with an & sign用 & 符号替换最后一个逗号
【发布时间】:2011-10-07 13:04:01
【问题描述】:

我到处搜索,但找不到适合我的解决方案。

我有以下几点:

$bedroom_array = array($studio, $one_bed, $two_bed, $three_bed, $four_bed);

对于这个例子,让我们说:

$studio = '1';
$one_bed = '3';
$two_bed = '3';

然后我使用 implode 函数在所有值之间添加一个逗号:

$bedroom_list = implode(", ", array_filter($bedroom_array));
echo $bedroom_list;

然后输出:

1、2、3

我想要做的是找到字符串中的最后一个逗号并用 & 替换它,所以它会变成:

1、2 和 3

字符串并不总是这么长,它可以更短或更长,例如1、2、3、4 以此类推。我已经研究过使用 substr,但不确定这是否能满足我的需要?

【问题讨论】:

标签: php substr implode array-filter


【解决方案1】:

弹出最后一个元素,将其余元素内爆在一起,然后重新粘贴最后一个元素。

$bedroom_array = array('studio', 'one_bed', 'two_bed', 'three_bed', 'four_bed');
$last = array_pop($bedroom_array);
$string = count($bedroom_array) ? implode(", ", $bedroom_array) . " & " . $last : $last;

如有必要,将& 转换为实体&

【讨论】:

  • 我将 $string = implode(", ", $bedroom_array) . " & " . $last; 更改为 $string = count($bedroom_array) ? implode(", ", $bedroom_array) . " & " . $last : $last; 以涵盖在弹出之前数组中只有一个元素的情况。此外,如果这只是直接进入浏览器,请使用 ' & ' 而不是 ' & '
  • 这是一个带有一点错误检查的函数版本:ideone.com/SQZfi
  • 感谢您的帮助!我尝试使用 Micheals 的想法,但遇到了一些麻烦,因为数组中的变量并不总是设置 - 因此使用 array_filter。我得到了 & 工作,但它仍然会显示最后一个数组,我会得到 1、2 和 2 而不是 1 和 2。最后我使用了像梦一样工作的 Brads 代码!不过,我仍然对其他方法感兴趣!
【解决方案2】:

如果你有逗号分隔的单词列表,你可以使用:

$keyword = "hello, sadasd, sdfgdsfg,sadfsdafsfd, ssdf, sdgdfg";
$keyword = preg_replace('/,([^,]*)$/', ' & \1', $keyword);
echo $keyword;

它将输出: 你好,sadasd,sdfgdsfg,sadfsdafsfd,ssdf & sdgdfg

【讨论】:

    【解决方案3】:

    单线替代方案,适用于任何大小的数组 ($b = $bedroom_array):

    echo count($b) <= 1 ? reset($b) : join(', ', array_slice($b, 0, -1)) . " & " . end($b); 
    

    【讨论】:

      【解决方案4】:
      function fancy_implode($arr){
          array_push($arr, implode(' and ', array_splice($arr, -2)));
          return implode(', ', $arr);
      }
      

      我发现这更容易阅读/理解和使用

      • 不修改原始数组
      • 不使用正则表达式,因为如果数组中的字符串包含逗号,这些表达式可能会失败,这可能是有正当理由的,例如:array('Shirts (S, M, L)', 'Pants (72 x 37, 72 x 39)');
      • 分隔符的长度不必与其他一些解决方案的长度相同

      【讨论】:

        【解决方案5】:
        $bedroom_list = implode(", ", array_filter($bedroom_array));
        
        $vars =  $bedroom_list;
        
        $last = strrchr($vars,",");
        
        $last_ = str_replace(",","&",$last);
        
        echo str_replace("$last","$last_",$vars);
        

        【讨论】:

          【解决方案6】:
          <?php
          $string = "3, 4, 5";
          echo $string = preg_replace('/,( \d)$/', ' &\1', $string);
          ?>
          

          【讨论】:

            【解决方案7】:

            strrpos 查找指定字符串的最后一次出现。 $str = '1, 2, 3';

            $index = strrpos( $str, ',' ); 
            if( $index !== FALSE )
                $str[ $index ] = '&'; 
            

            【讨论】:

              【解决方案8】:

              这是另一种使用正则表达式进行替换的方法,它使用不需要反向引用的正向前瞻:

              $bedroom_list = preg_replace('/,(?=[^,]*$)/',' &', implode(', ', $bedroom_array));
              

              【讨论】:

                猜你喜欢
                • 2012-06-02
                • 2011-06-18
                • 1970-01-01
                • 1970-01-01
                • 2019-07-01
                • 2012-12-16
                • 2011-08-02
                • 2015-06-19
                • 1970-01-01
                相关资源
                最近更新 更多