まあ、いろいろ思うところがあって。
その1 PHPのソースをブログに貼り付けるためにタグとかを変換するツールをちょいっと作ってみた。
ちなみに、作ってあげた人のコメント欄で、タグの自動変換は<じゃなくて、<のように実体参照にすべきでは?という意見がありました。
うん。そのとおりだと思う。
ちなみにPHPにはコマンドでそれ相当のことをしてくれるコマンドがある。それはphp.exeそのものなのだが。だからあえていちいち作る必要は、そういう意味ではない。
たとえばこんなコード(temp.php)を、
<?php echo "hello, world"; ?>
こんな風にしてくれちゃうわけ。関数のハイライトとかもやってくれる。(ある意味そこがおせっかいなのだが)
php.exe -s temp.php <code><span style="color: #000000"> <br /> </span><span style="color: #007700">echo </sp an><span style="color: #DD0000">"hello, world"</span><span style="color: #0 <br /></span><span style="color: #0000BB">?></span> </span> </code>
だから実際はあえて作る意味なんてほぼなかったんだ。
今までのスタイルを踏襲させるために作ったんだ。
ちなみに実際はこんな感じでどーだろうか。
<?php // ファイルを仮に変数に読んだとして $file = "temp.php"; $contents = split("\r\n", htmlentities( file_get_contents($file) ) ); foreach( $contents as $key => $value ) { printf("%2d . %s<br>\n", ++$key, $value); } ?>
その2 ループ内のcountについて
他の言語もそうなんだと思うんだけど
for($i=0; $i < count($array); $i++) { ... }
みたいなコードはどうにかならんのかね。こういう入門書が多くてガチで困る。
ループの中でcountという関数を呼ぶと、その関数が毎回処理されてしまうので、その時間がかかる。
これが1〜100000までの配列を生成して和を求めるループを計測したベンチマーク(PEAR::Benchmark_Timer利用)
---------------------------------------------------- marker time index ex time perct ---------------------------------------------------- Start 1197594037.30534200 - 0.00% ---------------------------------------------------- Stop 1197594037.38918500 0.083843 100.00% ---------------------------------------------------- total - 0.083843 100.00% ----------------------------------------------------
こっちがcountをfor内部で呼んだ場合にかかる時間。
---------------------------------------------------- marker time index ex time perct ---------------------------------------------------- Start 1197594065.16430400 - 0.00% ---------------------------------------------------- Stop 1197594065.28901400 0.124710 100.00% ---------------------------------------------------- total - 0.124710 100.00% ----------------------------------------------------
明らかに後者の方がコストがかかる。
なので
$cnt = count($array);
for($i=0; $i < $cnt; $i++) { ... }
を推奨。