【问题标题】:PHP get values from a comma separated string at commas without exploding and looping [duplicate]PHP从逗号分隔的字符串中获取值而不会爆炸和循环[重复]
【发布时间】:2023-03-14 10:37:01
【问题描述】:

有没有办法在逗号处拆分逗号分隔的字符串,而无需先将其分解并循环遍历数组?我有一个从数据库输出的字符串,如下所示。然后我将它们分成链接。

但是,考虑到字符串的原样,我可以不按照下面的方式将其放入链接吗?

<?php

$tags = "fiction,non-fiction,horror,romance"; 

$tags = explode(',', $tags);

foreach( $tags as $tag ){
    echo '<a href="'.$tag.'">'.$tag.'</a><br />';
}

?>

上面的最后一个是:

<a href="fiction">fiction</a><br />
<a href="non-fiction">non-fiction</a><br />
<a href="horror">horror</a><br />
<a href="romance">romance</a><br />

【问题讨论】:

  • 我能想到的唯一其他方法是使用数组 - 这仍然需要循环 - 或正则表达式 - 这也需要循环。你必须循环,因为每个标签都必须被推断并给出它自己的链接。
  • 这样做有什么问题?

标签: php arrays string


【解决方案1】:

您可以使用单个正则表达式:

preg_replace('~\s?([^\s,]+)\s?(?:,|$)~', '<a href="$1">$1</a><br />' . PHP_EOL, $tags);
  • \s? 匹配单个空格或不匹配
  • ([^\s,]+) 匹配所有内容,直到到达空格或逗号并捕获它
  • \s? 再次匹配单个空格或什么都不匹配
  • (?:,|$) 匹配逗号或字符串结尾

【讨论】:

    【解决方案2】:

    您可以使用array_walk 代替foreach,但效果几乎相同。

     array_walk(explode(',',$tags),function($tag){
         echo '<a href="'.$tag.'">'.$tag.'</a><br />';
        });
    

    【讨论】:

      【解决方案3】:

      如果你想使用经过测试的健壮代码,当你有一些用引号括起来的值来转义引号字符串中的实际逗号时不会出错(天真的方法仍然会分裂),你可以尝试使用 @ 987654321@

      【讨论】:

        【解决方案4】:
        <?php
        $tags = "fiction,non-fiction,horror,romance"; 
         /*You can achieve that by using regular expresions*/
        $pattern = '~(?|select ([a-z][^\W_]*+) | *+([a-z][^\W,_]*+) *+,?)~i';
           //str_replace() function used for breaking the newline.
         echo '<a href="'.$tags.'">'.str_replace(',', "<br/>", $tags).'</a>';
        
        ?>
        

        【讨论】:

          猜你喜欢
          • 2016-12-04
          • 2011-11-10
          • 2019-05-08
          • 1970-01-01
          • 1970-01-01
          • 2017-06-06
          • 2017-01-14
          • 2016-02-11
          • 1970-01-01
          相关资源
          最近更新 更多