2011-07-03 1 views
2
内のすべての番号と一致する正規表現preg_replace_callback
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:PHP

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

数が0であれば、それは出力から削除される以外それは、素晴らしい作品。問題を引き起こしている行は_getHtmlCode$rows = array_filter(explode("\n", $text));です。正確な原因はarray_filterです。私はそれを削除すると、私の出力が完全に壊れているが、0が表示されます。私がそれを残すと、0は削除されます。

これを修正する方法についてのご意見はありますか?

答えて

3

array_filterためMan pageにはコールバックが供給されていない場合は、FALSEに等しい入力のすべて *エントリーが( がブール値に変換する*参照) *削除されますあなたの答え

を持っています。 *

そして私は0 evaluates to FALSEと信じています。

私は現時点でテストすることはできませんが、私はこれが動作すると信じて

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