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