2017-07-12 55 views
1

我有這個字符串:000 003,發佈更多評論後可以立即增加。在300條評論之後,此字符串將如下所示:000 303。經過1 000條評論,001 303等。我使用chunk_split()在前3個前導零後面添加空格。用跨度元素替換前導零點

我想用<span class="color-gray">the zeros here</span>替換前導零,但我無法修復它。這裏的功能看起來像此刻:

function format_id($string) { 
    if($string < 10) { 
     $test = chunk_split('00000'.$string, 3, ' '); 

    } elseif($string > 10 AND $string < 100) { 
     $test = chunk_split('0000'.$string, 3, ' '); 

    } elseif($string > 100 AND $string < 1000) { 
     $test = chunk_split('000'.$string, 3, ' '); 

    } elseif($string > 1000 AND $string < 10000) { 
     $test = chunk_split('00'.$string, 3, ' '); 

    } elseif($string > 10000 AND $string < 100000) { 
     $test = chunk_split('0'.$string, 3, ' '); 

    } else { 
     $test = chunk_split($string, 3, ' '); 
    } 

    return preg_replace('/^0/', '$1', $test); 
} 

format_id(35)回報00 003。我希望它在HTML中看起來像這樣:<span class="color-gray-light">000 00</span>3。只有零(如我所說)將在span元素內。

我該如何解決這個問題?

+0

爲什麼不能用[str_replace](http://php.net/manual/en/function.str-replace.php)去除空格,然後用戶[number_format](http:// php .net/manual/en/function.number-format.php)或/和[sprintf](http://php.net/manual/en/function.sprintf.php)? – Peon

+0

我想你是什麼意思,爲什麼我不顯示這樣的數字:1 403 434等等。因爲我想它就像我在我的問題中顯示:) – Erik

+0

https://stackoverflow.com/questions/1699958/formatting-a-number-with-leading-zeros-in-php? – Peon

回答

2
return preg_replace(
    '/^([\s0]+)/', 
    '<span class="color-gray-light">$1</span>', 
    $test 
); 

這將在您需要的範圍中包裝零(和空格)。

+0

這個伎倆!非常感謝!我會盡快接受你的回答:) – Erik

0

這應該做的伎倆:

function format_id($string) { 
    return preg_replace('/^([\s0]+)/', '<span class="color-gray-light">$1</span>', $string); 
} 
1

下面是不使用正則表達式的替代:

function format_str($number, $maxLen){ 
    $len  = strlen($number); 
    $padding = $maxLen - $len; 
    if($padding > 0){ 
     return "<span>".str_pad ('' , $padding, '0', STR_PAD_LEFT)."</span>".$number; 
    } 

    return $number; 
} 

見這裏:https://3v4l.org/fJHXW

顯然,這不處理浮點值。但我認爲你只用整數。

輸出:

echo format_str(1,6); 
// <span>00000</span>1 
echo format_str(10,6); 
// <span>0000</span>10 
echo format_str(152,6); 
// <span>000</span>152 
echo format_str(32152,6); 
// <span>0</span>32152 
1

我重新寫你的函數是一個有點簡單,更靈活的(我希望你的網站可以長到具有超出6位數字內容!)。

Flosculus有你的問題的答案(我已經把它包含在這個函數中);這只是爲了解決你的功能本身。

<?php 
function format_id ($string, $zero_padding) { 
    // Add the padding 
    $string = str_pad($string, $zero_padding, '0', STR_PAD_LEFT); 

    // Now split the string to have space every 3 chars 
    $string = chunk_split($string, 3, ' '); 

    // Finally, add the span. Credit goes to Flosculus' answer for this! 
    return preg_replace(
     '/^([\s0]+)/', 
     '<span class="color-gray-light">$1</span>', 
     $string 
    ); 
} 

print format_id("3", 9); 
?>