content【PHP】カンマ区切り(CSV)データ処理にループと配列と分岐をなくして高速化PHPリファクタリングデータベースでカンマ区切り(CSV)のデータが入っていることがあります。カンマ区切りデータは、PHPでよく配列に変換してループを回して処理します。どの言語でもそうですが、配列やループは処理が遅くなりがちです。そんな書き方ではいつまでも成長できないので、今回は他人のソースのリファクタリングに挑戦してみました。現在の時間が、処理すべき時間のリストに入っているか確認して、bool値で返します。毎時バッチ処理や毎時アラームをイメージしていただければわかりやすいと思います。カンマ区切りの『時』リストが入ります。現在の『時』が入っています。$ret;}リファクタリング結果1行で書けますね。$ret;}ループは極力減らすループ処理はプログラムの中でも速度が遅くなる元凶です。ループでの繰り返し処理回数を減らせば減らすほど、プログラムの速度は早くなり無駄なリソースを使いません。配列をすべて確認している無意味なコードを修正します。戻し処理を終えるべきです。$ret;}変数や配列は最小限にする変数はプログラムを追跡する際に、常に気にかけてなければならない対象となります。変数が少なければ少ないほど、コードレビューのときに負担が減ります。配列はメモリ消費量が大きいのでできるだけ使用は控えたいものです。なくても動作するので削除します。プログラムの基本です。これは私の好みですが、分岐や繰り返し処理は最低限しか使わないほうが好きです。使わなくてもいいケースがほとんど。)分岐や繰り返しはテストケースの増大も招く恐れもあります。今回のケースは、文字列の検索で解決できそうです。いう時間を表すカンマ区切りの文字列があったとします。9時が対象になっているかどうかは、9時が上記の文字列の中に入っているかを検索すればよいだけの話なのです。検索してはいけません。ヒットしてしまいます。ように、カンマで区切られたところを含めて検索すればよいのです。上記の検索キーでは先頭と末尾が検索対象から外れてしまいます。文字列にもひと工夫してあげます。これで配列に分解してループを回さなくても、同じ判定処理ができるようになります。返す仕様となっています。判定することができます。ついでにガード節も不要となったので削除します。ループと配列、分岐の処理をなくすことができました。false);}最後に見直してみると、逆にリファクタリングしすぎですね。あと今回のケースは、できるならテーブルの正規化が正解でしょう!カンマ区切りのデータが入っているテーブルなんて、非正規化テーブルと同じですから。requestStockLike0@mainy小さい会社の社内SEから30過ぎてIT業界に転職。得意分野はWeb系とC#。趣味でKotlinとSwiftも。upLoginユーザーは見つかりませんでした。