2011-07-03 47 views
2
preg_replace_callback("/[0-9]*/", array(&$this, '_getPHPNumber'), $code); 

private function _getPHPNumber($matches) { 
    return ($this->_getHtmlCode($matches[0], PHP::$Colors['number'])); 
} 

private function _getHtmlCode($text, $color) { 
    $rows = array_filter(explode("\n", $text)); 
    $count = count($rows); 
    $output = ''; 

    for ($i = 0; $i < $count; $i++) { 
     $n = ($count > 1 ? ($i != $count - 1 ? "\n" : "") : ""); 
     $output .= "<span style=\"color:{$color};\">{$rows[$i]}</span>{$n}"; 

    } 

    return ($output); 
} 

上面看起來像這樣的輸出:PHP:正則表達式preg_replace_callback以匹配所有的數字在PHP

<span style="color:#FF0000;">152</span> 

它的偉大工程,但如果數字是0,它就會從輸出中刪除。引起該問題的線路是$rows = array_filter(explode("\n", $text));,其中_getHtmlCode。確切原因是array_filter。如果我刪除它,我的輸出會被完全破壞,但是會出現0。如果我離開它,0將被刪除。

有關如何解決此問題的任何想法?

回答

3

Man page爲array_filter有你的答案

如果沒有回調提供,輸入等於FALSE的所有 *項(見* 轉換爲boolean)將 *去除。 *

而且我相信0 evaluates to FALSE

我不能在此刻測試,但我相信這將工作

$rows = array_filter(explode("\n", $text), 'is_string');