将逗号分隔的字符串转换为数组

时间:2011-04-30 22:44:58

标签: php arrays string

我有一个逗号分隔的字符串,它包含一个标记列表,并希望将其转换为数组以获取每个标记的链接。

示例:

$string = 'html,css,php,mysql,javascript';

我想这样做:

<a href="tag/html">html</a>, <a href="tag/css">css</a>, <a href="tag/php">php</a>, <a href="tag/mysql">mysql</a>, <a href="tag/javascript">javascript</a>

因此,结果将是一个字符串,其中包含逗号分隔的链接,每个链接后都有一个空格,并且在最后一个链接后没有逗号。

我有这个函数,其中$ arg ='html,css,php,mysql,javascript':

function info_get_tags( $arg ) {
    global $u;

    $tagss = '';
    if ( $arg == '' ) {
        return '';
    } else {
        $tags_arr = explode( ',' , $arg );
        foreach ( $tags_arr as $tag ) {
            $tags = '<a href="' . $u . 'tag/' . $tag . '/" title="' . $tag . '">' . $tag . '</a>';
            $tagss .= $tags;
        }

        return $tagss;
    }
}

这个脚本适合我,但没有逗号和空格,如果我们在这里添加逗号和空格:

$tags = '<a href="' . $u . 'tag/' . $tag . '/">' . $tag . '</a>, ';

我们得到逗号和空格,但在最后一个链接后会有一个尾随逗号。

10 个答案:

答案 0 :(得分:16)

就像你explode d你可以再次implode

$tags = explode(',', $arg);
foreach ($tags as &$tag) {
    $tag = '<a href="' . $u . 'tag/' . $tag . '/" title="' . $tag . '">' . $tag . '</a>';
}

return implode(', ', $tags);

答案 1 :(得分:2)

这是使用array_map而不是foreach循环的替代方法:

global $u; 
function add_html($tag){
    return('<a href="' . $u . 'tag/' . $tag . '/" title="' . $tag . '">' . $tag .  '</a>');
}
function get_tags($taglist){
    $tags_arr = array_map("add_html", explode( ',' , $taglist));
    return implode(", " , $tags_arr);
} 

答案 2 :(得分:1)

试试这个简短的代码

  

$ string ='html,css,php,mysql,javascript';

     

$ string = explode(',',$ string);
  foreach($ string as $ link){
  echo '<a href="tag/'.$link.'">'.$link.'</a>';
  }

答案 3 :(得分:0)

最简单的方法是将html转换为数组(每个标记链接是一个数组元素),然后在,上内爆......

if ( $arg == '' ) {

    return '';

} else {

    $tags_arr = explode( ',' , $arg );
    $tags  = array();
    $tagtpl = '<a href="%s" title="%s">%s</a>';

    foreach ( $tags_arr as $tag ) {
        $url = $u . 'tag/' . $tag . '/';
        $tags[] = sprintf($tagtpl, $url, $tag, $tag);

    }

    return implode(', ', $tags);

}

答案 4 :(得分:0)

试试这个

$tagss = trim($tagss);    
return substr($tagss, 0 , strlen($tagss)-1);

答案 5 :(得分:0)

为什么不在创建数组时将所有标记放在数组中,然后爆炸数组并在标记之间添加逗号和空格。

foreach ( $tags_arr as $tag ) {
    $tags = '<a href="' . $u . 'tag/' . $tag . '/" title="' . $tag . '">' . $tag . '</a>';
    $tagss[] = $tags;
}
$tagss = explode(', ', $tagss);

答案 6 :(得分:0)

解决方法(!)之后将删除不需要的尾随字符:

$tagss = rtrim($tagss, ", ");

rtrim删除字符串右端的任何空格和逗号混合。

顺便说一下,您可以使用str_getcsv而不是爆炸,这也可以更好地处理输入空间。

答案 7 :(得分:0)

function info_get_tags($arg)
{
    global $u;
    if (empty($arg)) return '';
    return ltrim(preg_replace('/([^\,]+)/', ' <a href="' . $u . '/${1}/" title="${1}">${1}</a>', $arg));
}

答案 8 :(得分:0)

$string = 'html,css,php,mysql,javascript';

puts $string.split(/,/).map { |tag| "<a href=\"tag/#{tag}\">#{tag}</a>"}.join(", ")

结果:

<a href="tag/html">html</a>, <a href="tag/css">css</a>, <a href="tag/php">php</a>, <a href="tag/mysql">mysql</a>, <a href="tag/javascript">javascript</a>

答案 9 :(得分:-3)

另一种解决方案:

$html = trim(preg_replace('/([^,]+)/', ' <a href="/tags/\1" title="\1">\1</a>', $string));

或者如果你必须对标签进行html编码(总是很聪明,因为你是从文本创建html):

$html = trim(preg_replace_callback('/([^,]+)/', function($match) {
    $tag = $match[1];
    return ' <a href="/tags/' . urlencode($tag) . '" title="' . htmlspecialchars($tag) . '">' . htmlspecialchars($tag) . '</a>';
}, $string));

因此$string也适用:"tag with space,html,css,php,mysql,javascript"

更多正则表达总是好的!