#author("2017-10-31T21:18:36+09:00","","") #author("2017-10-31T21:45:37+09:00","","") * lib/convert_html.php のclass YTable の微修正案 [#zc74c6fd] - ページ: [[BugTrack]] - 投稿者: 名無しさん - 優先順位: 低 - 状態: 完了 - カテゴリー: その他 - 投稿日: 2007-09-08 (土) 14:15:48 - バージョン: 1.4.7 - リリース予定バージョン: 1.5.1 #contents ** メッセージ [#x5dceb82] 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 のもっとコアな部分が速くなればな~、と思いつつもこれぐらいしかできないので。~ 手のあいた時にでも、確認を願いします。 ** その1: 二回 count() [#v8957a59] $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 の中で逐一計算していた部分を外に出すために、今の形にしていたのだと思いますがどうでしょうか。 //#comment ** その2: unset() するのはどうか [#s7c687ae] さらにどうでもいい事ですが、$_value の中身(本文など)を$value と$align に写した後も、$_value を保持したまま残りの処理をしています。~ まあ、unset() してもforeach やfor ループの速さは変わらんでしょうけど。 //#comment -------- * コメント [#v3ae5067] -PukiWiki ChangeLog より --[[cvs:lib/convert_html.php]] (1.20): BugTrack2/269: YTable(): Cleanup - commit:c269397c2d で対応済みですので完了とします -- [[umorigu]] &new{2017-10-31 (火) 21:45:37}; #comment