PHP从逗号处的逗号分隔字符串中获取值,而无需分解和循环

PHP从逗号处的逗号分隔字符串中获取值,而无需分解和循环,php,arrays,string,Php,Arrays,String,有没有一种方法可以在逗号处拆分逗号分隔的字符串,而不首先将其分解并在数组中循环?我有一个从数据库输出的字符串,如下所示。然后我将它们拆分为链接 但是,考虑到字符串的方式,我可以不按照下面的方式将其导入链接吗 <?php $tags = "fiction,non-fiction,horror,romance"; $tags = explode(',', $tags); foreach( $tags as $tag ){ echo '<a href="'.$tag.'"&

有没有一种方法可以在逗号处拆分逗号分隔的字符串,而不首先将其分解并在数组中循环?我有一个从数据库输出的字符串,如下所示。然后我将它们拆分为链接

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

<?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 />





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

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

您可以使用
array\u walk
而不是
foreach
,但这几乎是一样的

 array_walk(explode(',',$tags),function($tag){
     echo '<a href="'.$tag.'">'.$tag.'</a><br />';
    });
array_walk(分解(',',$tags),函数($tag){
回声“
”; });
如果您想使用经过测试的健壮代码,当一些值被引号包围时,这些代码不会出现错误,以转义引号字符串中的实际逗号(原始方法仍然会分割),您可以尝试使用


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

?>