簡體   English   中英

將逗號分隔的字符串轉換為數組

[英]Convert comma separated string into array

我有一個逗號分隔的字符串,它由一個標簽列表組成,並希望將其轉換為數組以獲取每個標簽的鏈接。

例子:

$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>

所以結果將是一個包含逗號分隔鏈接的字符串,每個鏈接后有一個空格,最后一個鏈接后沒有逗號。

我有這個 function 其中 $arg = 'html,css,php,Z81C3B0863CZ,Z81C3B0863CZ,Z81C3B0863CZ,Z81C3B0863CZ,Z81C3B08'0DAD537B72EZE,0987EZA,css,php

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

我們得到逗號和空格,但在最后一個鏈接之后會有一個尾隨逗號。

就像你explode d 你可以再次內implode

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

return implode(', ', $tags);

這是使用 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);
} 

試試這個短代碼

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

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

$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>

最簡單的方法是將 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);

}

嘗試這個

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

為什么不在創建時將所有標簽放在一個數組中,然后分解數組並在標簽之間添加逗號和空格。

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

解決方法(:) 是之后刪除不需要的尾隨字符:

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

rtrim從字符串的右端刪除任何空格和逗號的組合。

順便說一句,您可以使用str_getcsv而不是explode,它也可以更好地處理輸入空間。

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

另一種解決方案:

$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"

更多的正則表達式總是好的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM