http://www.webzaru.net/php/1365/
なんか色々ともやもやする。
一番気に入らないのは$id=1を指定しても全行読み込むところですが、他にも引数$idによって返り値が違うとか、全く意味のないforがあるとか、$_enc_toをループ内で毎回呼び出してるとか、if()の後に{}が無いとか色々とびみょい。
ということで書き直した。
書き直してはみたもののやはり微妙だ。
メソッドがキャメルケースなのに内部変数がスネークケースのせい?
FROMエンコーディングがファイルを確認せずにSJIS固定のせい?
特定行取得はメソッドに織り込んでるのに範囲取得はarray_sliceとかやってるせい?
いや、そもそもニュースとかCSVじゃなくてDBで管理しろってところだ。
ちなみにfgetcsv_regは有名なのですが、そのまま使うとUndefined variable: eofのNoticeが出ます。
頭に$eof = false;とか突っ込んでおきましょう。
なんか色々ともやもやする。
一番気に入らないのは$id=1を指定しても全行読み込むところですが、他にも引数$idによって返り値が違うとか、全く意味のないforがあるとか、$_enc_toをループ内で毎回呼び出してるとか、if()の後に{}が無いとか色々とびみょい。
ということで書き直した。
class GetCsv{ /** * CSVの全行を取得する * * @param String ファイル名 * @return array fgetcsvの配列 */ public static function getCsvData( $filename, $id = false ){ if($id && is_int($id)){ return self::getCsvLine($filename, $id); } if ( !file_exists( $filename ) ){ return false;} $rows = array(); $_enc_to = mb_internal_encoding(); $_enc_from = 'sjis'; $handle = fopen( $filename, 'r' ); self::fgetcsv_reg( $handle ); while ( ( $data = self::fgetcsv_reg( $handle ) ) !== false ) { $rows[] = $data; } mb_convert_variables( $_enc_to, $_enc_from, $rows ); fclose( $handle ); return $rows; } /** * CSVの特定行を取得する * * @param String ファイル名 * @param int 取得する行 * @return array fgetcsv */ public static function getCsvLine( $filename, $id ){ if ( !file_exists( $filename ) ){ return false;} $_enc_to = mb_internal_encoding(); $_enc_from = 'sjis'; $handle = fopen( $filename, 'r' ); for($loop=0; $loop<$id; $loop++){ if(!self::fgetcsv_reg($handle)){ return false; } } $row = self::fgetcsv_reg($handle); mb_convert_variables( $_enc_to, $_enc_from, $row ); fclose( $handle ); return $row; } }
書き直してはみたもののやはり微妙だ。
メソッドがキャメルケースなのに内部変数がスネークケースのせい?
FROMエンコーディングがファイルを確認せずにSJIS固定のせい?
特定行取得はメソッドに織り込んでるのに範囲取得はarray_sliceとかやってるせい?
いや、そもそもニュースとかCSVじゃなくてDBで管理しろってところだ。
ちなみにfgetcsv_regは有名なのですが、そのまま使うとUndefined variable: eofのNoticeが出ます。
頭に$eof = false;とか突っ込んでおきましょう。
PR