PHP以逗号分隔的字符串从逗号获取值,而不会爆炸和循环

时间:2014-09-14 14:07:12

标签: php arrays string

有没有办法在逗号中拆分逗号分隔的字符串,而不首先将其爆炸并循环遍历数组?我有一个从数据库输出的字符串,它以我在下面显示的方式出现。然后我将它们分成链接。

但是,考虑到字符串的方式,我是否可以按照下面的方式将其添加到链接中?

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

如果你想使用经过测试的健壮代码,当你有一些用引号括起来的值来逃避引用字符串中的实际逗号(天真的方法仍会分裂)时你不会发现错误,你可以尝试使用{ {3}}

答案 3 :(得分:1)

<?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>';

?>