lib/convert_html.php のclass YTable の微修正案

メッセージ

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()

$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 の中で逐一計算していた部分を外に出すために、今の形にしていたのだと思いますがどうでしょうか。

その2: unset() するのはどうか

さらにどうでもいい事ですが、$_value の中身(本文など)を$value と$align に写した後も、$_value を保持したまま残りの処理をしています。
まあ、unset() してもforeach やfor ループの速さは変わらんでしょうけど。


コメント



トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-10-31 (火) 21:45:37
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.238 sec.

SourceForge