continueとか文字列比較とか
前回まででHTMLScrapingのサンプルスクリプトHTMLToFeed.class.phpを使ってHTMLをRSSするコツはだいたい押さえた気がします。
出力されるRSSの内容で、不都合なものを修正する作業を引き続きします。
breakとかcontinueとか
categoryがnewsになるitemについては、他の方法でより詳細なRSSを取得できるので、処理対象から外す(出力しない)ことにします。
この場合、当該itemを処理する処理をスキップする必要があります。
breakだとループ自体を終了させてしまうので、continueなんですね、この場合。
breakは、現在実行中の for, foreach, while, do-while, switch 構造の実行を終了します。
▽PHP:break - Manual
http://www.php.net/manual/ja/control-structures.break.php
continue は、ループ構造において現在の繰り返しループ の残りの処理をスキップし、条件式を評価した後に 次の繰り返しの最初から実行を続けるために使用されます、
▽PHP:continue - Manual
http://jp.php.net/manual/ja/control-structures.continue.php
「continueでは、オプションの引数で 処理をスキップするループ構造のレベルの数を指定」できるというのがちょっと面白い。
文字列どうしの比較
continueを使って下記のように書いてみました。
<?php // 以上略 /* カテゴリ(li class)がnewsの時は処理対象から外します */ $category = (string) $li['class']; if ($category === 'news') { continue; } // 以下略 ?>
文字列型どうしの比較の場合は、同じ型であるか否かを確認する===を使った方がいいみたい。
比較演算子の==は、型の確認をしませんが、===の方がパフォーマンスがいいというのは不思議な感じです。
型変換をしないため、といわれればなるほどと思いますけど。
▽比較演算子のパフォーマンス(PHPプロ!)
http://www.phppro.jp/phptips/archives/vol48/2
しかし、こんな記事もありました。
今回は文字列どうしなので直接該当しませんが、文字列の比較の際には==厳禁ということですね。
strcmpを使えとありますが、面倒なのでそこは手抜きします……
▽[言語][プログラミング][PHP]素晴らしき自動的な世界〜或いは「型のない」世界〜
(がるの健忘録)
http://d.hatena.ne.jp/gallu/20061108/p1
▽PHP、文字列比較で「==」は禁止! - goungoun技術系雑記帳
http://goungoun.dip.jp/app/fswiki/wiki.cgi/devnotebook?page=PHP%A1%A2%CA%B8%BB%FA%CE%F3%C8%E6%B3%D3%A4%C7%A1%D6%3D%3D%A1%D7%A4%CF%B6%D8%BB%DF%A1%AA
▽PHP:strcmp - Manual
http://jp.php.net/manual/ja/function.strcmp.php