人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CSV形式のログファイルのソート方法を実現させるには
どのように考えれば良いでしょうか?

ログファイルに名前、ふりがな、性別、年齢でと有る場合に
フリガナ順で出力させるようにしたいです。

CSV
花子,はなこ,女,21
太郎,たろう,男,22
次郎,じろう,男,18

PHPスクリプト
$array = file("csv.csv");

$c = count($array);
$i = 0;


while($i < $c){
$array[$i] = trim($array[$i]);
list($name[$i],$sex[$i],$age[$i]) = split("\,",$array[$i]);
echo "<p>".$i."人目は".$name[$i]."です</p>";
$i++;
}



●質問者: akide
●カテゴリ:ウェブ制作
✍キーワード:CSV echo name PHP SEX
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GoldenDawn
●60ポイント

usort などによってソートしてやります。

<?php
$array = file("csv.csv") ;

$c = count($array) ;
$i = 0 ;


function cmp_furigana($a, $b) {
 $aa = explode(',', $a) ;
 $ab = explode(',', $b) ;

 return strcmp($aa[1], $ab[1]) ;
}
usort($array, cmp_furigana) ;


while($i < $c){
 $array[$i] = trim($array[$i]) ;
 list($name[$i],$sex[$i],$age[$i]) = split("\,",$array[$i]) ;
 echo "<p>".$i."人目は".$name[$i]."です</p>" ;
 $i++ ;
}


/*
// for ループによる実装
for ($i = 0; $i < count($array); ++$i) {
 list($name[$i], $sex[$i], $age[$i]) = explode(',', trim($array[$i])) ;
 echo "<p>".$i."人目は".$name[$i]."です</p>" ;
}
 */
?>

http://php.manual.php.to/function.usort.html

◎質問者からの返答

回答ありがとうございます。

ソート部分が理解できません、、、考え方を教えていただけますか_?


2 ● GoldenDawn
●10ポイント

通常のソートでは配列の一つの要素として「花子,はなこ,女,21」という文字列全体が使われますが、

これを「はなこ」の部分だけにしたいわけです。


usort($array, cmp_furigana) ;

ソートは二つの要素の大小を比較して並べ換えますが、usort を使うと、この比較を行う関数を自分で定義できます。

ここでは cmp_furigana (ちなみに cmp は compare の略) と言う関数を定義していますが、create_function 関数で直接記述することもできます。


function cmp_furigana($a, $b) {

ここで cmp_furigana は比較する二つの要素、たとえば "花子,はなこ,女,21" と "太郎,たろう,男,22" という二つの文字列を受けとって $a、$b に格納します。

$aa = explode(',', $a) ;
$ab = explode(',', $b) ;

explode 関数によって "花子,はなこ,女,21" は array("花子", "はなこ", "女", "21") と言う配列に分解されます (explode が使える場合なら split よりこちらの方が速い)。


 return strcmp($aa[1], $ab[1]) ;

比較関数は大小を比較した結果として正か負の値か、$a, $b が等しい場合はゼロを返します。

ここでは文字列比較関数 strcmp にその判定をさせています。

($aa[1] と $ab[1] にはそれぞれ "はなこ"、"たろう" が入っている)


usort は cmp_furigana の返り値をもとにソートを行います。


http://php.manual.php.to/function.strcmp.html

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ