lib/convert_html.php のCSV形式の表組み(YTable)を生成するところで、このままでいいのかな?と思う部分があったので提案します。
と言ってもほとんど何も変わらない気もしますけど。
下はcvs:lib/convert_html.php (v 1.19) の抜粋です。
class YTable extends Element { var $col; function YTable($_value) { parent::Element(); $align = $value = $matches = array(); foreach($_value as $val) { (中略) } $this->col = count($value); $colspan = array(); foreach ($value as $val) $colspan[] = ($val == '==') ? 0 : 1; $str = ''; $count = count($value); for ($i = 0; $i < $count; $i++) { if ($colspan[$i]) { while ($i + $colspan[$i] < $count && $value[$i + $colspan[$i]] == '==') $colspan[$i]++; $colspan[$i] = ($colspan[$i] > 1) ? ' colspan="' . $colspan[$i] . '"' : ''; $str .= '<td class="style_td"' . $align[$i] . $colspan[$i] . '>' . make_link($value[$i]) . '</td>'; } } $this->elements[] = $str; }
本当はlib/convert_html.php のもっとコアな部分が速くなればな~、と思いつつもこれぐらいしかできないので。
手のあいた時にでも、確認を願いします。
$this->col にcount($value) を代入してから$count にcount($value) を代入するまでの間に、$value の要素を変更していないのに、2回count($value) する意味があるのかなと。
$this->col = $count = count($value);
に修正するとか、for ループの中で$count をいじっていないので、いっその事$count を$this->col にしてしまっても問題がなさそうです。
もともとは、次のように
for ($i = 0; $i < count($value); $i++) { if ($colspan[$i]) { while ($i + $colspan[$i] < count($value) and $value[$i + $colspan[$i]] == '==')
for やwhile の中で逐一計算していた部分を外に出すために、今の形にしていたのだと思いますがどうでしょうか。
さらにどうでもいい事ですが、$_value の中身(本文など)を$value と$align に写した後も、$_value を保持したまま残りの処理をしています。
まあ、unset() してもforeach やfor ループの速さは変わらんでしょうけど。