2011-03-08 102 views
1

我需要轉換如何在PHP中執行此類字符串操作?

"01,02,03,04,05,07:01" 

到:

<b>07</b><b>09</b><b>30</b><b class="color_blue_ball">11</b> 

也就是說,包裹那些:<b></b>之前,但那些:<b class="color_blue_ball"></b>。如果沒有:後,都應該與<b></b>包裹

任何人都知道如何做到這一點?

+0

你有沒有試過* *做到這一點?如果是這樣,怎麼樣? – Jon 2011-03-08 09:39:41

+0

那麼,這也是一個有效的情景:'01,02,03,04,05,07:01,04,06'? – 2011-03-08 09:57:48

+0

輸入和輸出數字之間的映射怎麼樣? – 2011-03-08 10:07:20

回答

2

一點點更詳細:

<?php 
function wrapValues($array, $wrapper) { 
    $result = array(); 
    foreach ($array as $elem) { 
    $result []= str_replace('?', $elem, $wrapper); 
    } 
    return implode('', $result); 
} 

$values = "01,02,03,04,05,07:01,02"; 
$firstWrapper = '<b>?</b>'; 
$secondWrapper = '<b class="color_blue_ball">?</b>'; 

list($first, $second) = explode(':', $values); 

echo wrapValues(explode(',', $first), $firstWrapper) . 
    wrapValues(explode(',', $second), $secondWrapper); 
5

無需正則表達式:

echo '<b>' . str_replace(array(',', ':'), array('</b><b>', '</b><b class="color_blue_ball">'), "01,02,03,04,05,07:01") . '</b>'; 

編輯:如果 「01,02,03,04,05,07:01,04,06」 是有效的,那麼這個想法相同的,但explode增加:

$parts = explode(':', "01,02,03,04,05,07,01,04:06"); 
echo '<b>' . str_replace(',', '</b><b>', $parts[0]) . (isset($parts[1]) ? str_replace(',', '</b><b class="color_blue_ball">', ',' . $parts[1]) : '') . '</b>'; 
+1

聰明,但如果我正確解釋提問者問題,也可能出現這種情況:'01,02,03,04,05,07:01,04,06' – 2011-03-08 09:56:02

+0

我認爲',','。 $ parts [1]):'應該是:',$ parts [1]):'。除此之外:很好的答案。 +1 – 2011-03-08 12:37:36

2

我不知道這是否是做到這一點的最好辦法,但我可能會分裂的:的字符串,然後在,,然後每部分分別處理,並加入他們的行列重新走到一起。