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
===============

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/05/17 13:00:44
  • 終了:2007/05/24 13:05:03

回答(1件)

id:tezcello No.1

tezcello回答回数459ベストアンサー獲得回数692007/05/17 15:39:45

ポイント60pt

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項目での比較結果を返す

という内容です。


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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません