以下3つの多次元配列を、配列Dのようにする方法を知りたいです。
配列Dは日付で降順にソートします。
配列A
text01,text02,date
aaa,00a,2007-01-31 12:00:00
bbb,00b,2007-02-31 12:00:00
配列B
text01,text02,date
eee.00e,2007-05-31 12:00:00
fff,00f,2007-06-31 12:00:00
配列C
text01,text02,date
hhh,00h,2007-03-31 12:00:00
iii,00i,2007-04-31 12:00:00
合体した配列D
text01,text02,date
fff,00f,2007-06-31 12:00:00
eee.00e,2007-05-31 12:00:00
iii,00i,2007-04-31 12:00:00
hhh,00h,2007-03-31 12:00:00
bbb,00b,2007-02-31 12:00:00
aaa,00a,2007-01-31 12:00:00
よろしくお願いします。
eee.00e,2007-05-31 12:00:00
ここの「eee」の後ろのピリオドはカンマに変えました。
$t[0] = 'text01,text02,date aaa,00a,2007-01-31 12:00:00 bbb,00b,2007-02-31 12:00:00' ; $t[1] = 'text01,text02,date eee,00e,2007-05-31 12:00:00 fff,00f,2007-06-31 12:00:00' ; $t[2] = 'text01,text02,date hhh,00h,2007-03-31 12:00:00 iii,00i,2007-04-31 12:00:00' ; foreach($t as $i => $v) { foreach($a[$i] = split("\n", $v) as $n => $c) $a[$i][$n] = split(',', $a[$i][$n]) ; } $D = array_merge($a[0], $a[1], $a[2]) ; usort($D, create_function( '$a, $b', 'if ($a[2] == $b[2]) return 0 ; else return $a[2] < $b[2] ? 1 : -1 ;')) ; array_shift($D) ; array_shift($D) ; print_r($D) ;
http://q.hatena.ne.jp/1178209752
こちらに同様の質問と回答がありました。
チョット解りません。
まず、合体する方法がわかりません。
それに、SQLは使いませんし、ソートに関する記述も見当たりません。
eee.00e,2007-05-31 12:00:00
ここの「eee」の後ろのピリオドはカンマに変えました。
$t[0] = 'text01,text02,date aaa,00a,2007-01-31 12:00:00 bbb,00b,2007-02-31 12:00:00' ; $t[1] = 'text01,text02,date eee,00e,2007-05-31 12:00:00 fff,00f,2007-06-31 12:00:00' ; $t[2] = 'text01,text02,date hhh,00h,2007-03-31 12:00:00 iii,00i,2007-04-31 12:00:00' ; foreach($t as $i => $v) { foreach($a[$i] = split("\n", $v) as $n => $c) $a[$i][$n] = split(',', $a[$i][$n]) ; } $D = array_merge($a[0], $a[1], $a[2]) ; usort($D, create_function( '$a, $b', 'if ($a[2] == $b[2]) return 0 ; else return $a[2] < $b[2] ? 1 : -1 ;')) ; array_shift($D) ; array_shift($D) ; print_r($D) ;
ご指導ありがとうございます。
スイマセンm(_ _)m
誤字がありましたね^^;
まだ、よく解っていませんが早速試してみます。
お返事は、理解するまで少し遅くなるかもしれません。
こんな感じですかね。
<?php $a = array( array('aaa', '00a', '2007-01-31 12:00:00'), array('bbb', '00b', '2007-02-31 12:00:00') ); $b = array( array('eee', '00e', '2007-05-31 12:00:00'), array('fff', '00f', '2007-06-31 12:00:00') ); $c = array( array('hhh', '00h', '2007-03-31 12:00:00'), array('iii', '00i', '2007-04-31 12:00:00') ); $d = array_merge($a, $b, $c); usort($d, 'cmp_by_date'); print_r($d); function cmp_by_date($v1, $v2) { return $v1[2] < $v2[2]; } ?>
↑の実行結果は↓
Array ( [0] => Array ( [0] => fff [1] => 00f [2] => 2007-06-31 12:00:00 ) [1] => Array ( [0] => eee [1] => 00e [2] => 2007-05-31 12:00:00 ) [2] => Array ( [0] => iii [1] => 00i [2] => 2007-04-31 12:00:00 ) [3] => Array ( [0] => hhh [1] => 00h [2] => 2007-03-31 12:00:00 ) [4] => Array ( [0] => bbb [1] => 00b [2] => 2007-02-31 12:00:00 ) [5] => Array ( [0] => aaa [1] => 00a [2] => 2007-01-31 12:00:00 ) )
ご回答ありがとうございますm(_ _)m
いや~、全くこんなカンジです^^/
ズバリ答えを書いていただいていますが、私なりにいろいろ実験して、結果報告いたします。
ありがとうございました。
ご指導ありがとうございます。
スイマセンm(_ _)m
誤字がありましたね^^;
まだ、よく解っていませんが早速試してみます。
お返事は、理解するまで少し遅くなるかもしれません。