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

php 4.2 win

phpを使います。
?「a.txtファイル」と「b.txtファイル」をまとめて「c.txtファイル」方法を教えてください。
※同じものは省くようおねがいします
※explode関数が使えれば使ってください

?まとめた「c.tetファイル」際に、4番目の位置(12234や123234の位置)で昇順にしたいです。かつ、4番目の位置で昇順にした上で、5番目の位置を降順にしたいです。
※explode関数が使えれば使ってください

ヤヤコシイですが詳しい方おねがいします。

test.txt(下記が1行ずつ入ったファイルです)
===============
kaba,akairo,2,123,1
sai,midori,4,124,2
tonakai,shiro,5,125,4
sai,aka,2,122,2
===============

b.txt(下記が1行ずつ入ったファイルです)
===============
semi,akairo,2,121,1
sai,aka,4,131,2
kirin,shiro,5,111,3
kirin,aka,2,124,4
===============

c.textはこうなるようにおねがいします
===============
sai,aka,4,131,2
tonakai,shiro,5,125,4
sai,midori,4,124,2
kirin,aka,2,124,4
kaba,akairo,2,123,1
sai,aka,2,122,2
semi,akairo,2,121,1
kirin,shiro,5,111,3
===============

●質問者: rrr3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:AKA KIRIN MIDORI PHP SAI
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tezcello
●60ポイント

c.txt の内容より、

4番目の項目で「降順」でかつ、5番目の項目で「昇順」

であるとします。(説明文とは逆です)

$a = file('a.txt');
$b = file('b.txt');

$a = array_unique($a);
$b = array_unique($b);

$c = array_merge($a, $b);

usort($c, 'compare');

function compare($v1, $v2){
$p = explode(',', $v1);
$q = explode(',', $v2);
if ($p[3] == $q[3]){
if ($p[4] == $q[4]) return 0;
return ($p[4] < $q[4]) ? -1 : 1;
}
return ($p[3] > $q[3]) ? -1 : 1;
}

これで、$c に結果が入ります。

後は、ファイル名をつけて保存するだけですね。

array_unique(), array_merge(), usort() についてはphpのマニュアルを参考にして下さい。

http://www.php.net/manual/ja/ref.array.php

比較関数は、

・第4項目が同じ時は第5項目での比較結果を返す

・それ以外は第4項目での比較結果を返す

という内容です。


質問等あれば、コメントがつけられるようにしておいて下さい。

関連質問


●質問をもっと探す●



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