日付、時間の2段階でソートをしたいのですが、うまくできません。
log.txt に以下の内容が入っています。
<>08/12<>23:15<>あああああああ<>
<>08/12<>00:25<>いいいいいいい<>
<>02/12<>02:00<>ううううううう<>
<>08/12<>22:00<>えええええええ<>
<>01/12<>17:52<>おおおおおおお<>
それを日付、時間の2段階でソートし以下のように並べ替えたいです。
<>01/12<>17:52<>おおおおおおお<>
<>02/12<>02:00<>ううううううう<>
<>08/12<>00:25<>いいいいいいい<>
<>08/12<>22:00<>えええええええ<>
<>08/12<>23:15<>あああああああ<>
どなたか教えてください。よろしくお願いします。
No.3ベストアンサー
- 回答日時:
日付と時間を分離しておくのもよいですが、そのまま秒数のまま保持させておくというのも手です。
<>08/12<>23:15<>あああああああ<>
↓
<>1155477461<>あああああああ<>
日付・時間→Unix時間の変換は mktime()で行います。
http://au3.php.net/manual/ja/function.mktime.php
また、表示時はdate()関数を使用して、date("m/d - H:i) 等して変換します。
もしくは
<>08,12,23,15<>あああああああ<>
と日付と日時をくっつけて持たせるのもアリでしょう。この場合は後から分解すればよいです。
日付・時間の項目を結合したこと前提で、肝心のソートもいくつか方法があります。
時間がレコード列の先頭にあれば、#2さんの仰るとおりそのままsort()することが出来ます。
そうでない場合はusort()でコールバック関数を適用してソートする方法があります(かなり遅いと思います)
http://au3.php.net/manual/ja/function.usort.php
$list = file("log.txt");
usort($list, "cmp");
function cmp($a, $b) {
list(,$timeA, ) = explode("<>", $a);
list(,$timeB, ) = explode("<>", $b);
if ($timeA == $timeB) {
return 0;
}
return ($timeA < $timeB) ? -1 : 1;
}
もう一つの方法として、先に時間を取り出した配列を用意して、array_multisort()を使う方法です。
http://au3.php.net/manual/ja/function.array-mult …
$list = file("log.txt");
//一旦, 列方向の日付に関する配列を作成
$dates = array();
foreach ($list as $line) {
list(,$date, ) = explode("<>", $list);
array_push($dates, $date);
}
// ソート
array_multisort($dates, SORT_ASC, $list);
ご希望の通り「日付」「時間」でデータが分けられた場合の2段階ソートを行う場合も、array_multisort()が利用できます。
$list = file("log.txt");
//一旦, 列方向の日付・時間に関する配列を作成
$dates = array();
$times = array();
foreach ($list as $line) {
list(,$date, $time, ) = explode("<>", $list);
array_push($dates, $date);
array_push($times, $time);
}
// ソート
array_multisort($dates, SORT_ASC, $times, SORT_ASC, $list);
No.4
- 回答日時:
改行処理を手抜きしてますが、こんなんで
よろしいのでは?
<?PHP
function cmp($a, $b){
$x=$a[1].$a[3];
$y=$b[1].$b[3];
if($x == $y){
return 0;
}
return ($x < $y) ? -1 : 1;
}
$handle = @fopen("log.txt", "r");
if ($handle) {
while (!feof($handle)) {
$tmp = fgets($handle, 4096);
$line[]=split("<>",$tmp);
}
fclose($handle);
}
usort($line, "cmp");
foreach($line as $val){
print implode("<>",$val);
}
?>
No.2
- 回答日時:
このフォーマットの場合は、そのままソートすればいいと思う。
$data=file("log.txt");
sort($data);
print_r($data);
この回答への補足
m(_ _)m スミマセン・・・間違えていました。
↓下のように日付と時間の間に関係ない文字が入っていても2段階でソートする方法が知りたいのです。
<>08/12<>rgrwge<>23:15<>あああああああ<>
<>08/12<>4tg4<>00:25<>いいいいいいい<>
<>02/12<>g45<>02:00<>ううううううう<>
<>08/12<>g4<>22:00<>えええええええ<>
<>01/12<>gerge<>17:52<>おおおおおおお<>
よろしくお願いします。
No.1
- 回答日時:
日付と時刻の両方を一緒にして mktime か何かで数値化して、それでソートすれば楽勝って気がしますけど。
参考URL:http://php.s3.to/man/function.mktime.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Excel(エクセル) エクセルでの色付け 5 2022/10/09 18:58
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) Excelのソート(並べ替え) 2 2022/05/15 22:54
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) Excel 行の"〇" を検索して見出し(日付)を表示させたい 1 2022/04/04 18:35
- Windows 10 Win 10エクスプローラーについて、ファイル名変更後即座に移動してしまう 対策は? 8 2023/08/16 03:49
- 運転免許・教習所 自動車教習所の技能教習は連続で2時間受けれますか? 教習生手帳の初めのページ見てると「1日の教習限度 5 2022/09/18 23:27
- 一戸建て どの薪ストーブを選べば良いか分かりません。 4 2022/10/05 22:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
XML_Serializerで複数のXMLの扱い
-
Zend_Form_Element_Hash
-
ランキング表示のプログラム
-
月一覧を取得するには?(20120...
-
phpのin_array()でわからない事...
-
占いのPHPを作成中ですが・・・
-
掲示板のあらし対策
-
C言語の配列をPush(追加)する...
-
配列をループでたくさん宣言し...
-
ファイルから指定行数分だけ読...
-
forとかで連番の変数を一気に格...
-
配列の要素(value)に、変数を...
-
セッション配列の取得の仕方
-
phpでforeachの中にforeachがあ...
-
CArrayのソート
-
読み(あ行~わ行)ごとに分け...
-
verilogで、配列の一部をタスク...
-
PHPのカッコ[ ]の使い方について
-
チェックボックスが複数選択で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
日付、時間の2段階でソート
-
NGワード設定もしくはテキス...
-
掲示板のあらし対策
-
flickrでの画像を取得について
-
テキストボックスの日本語をロ...
-
PHPでファイルアップローダー
-
HTTPのメッセージボディについ...
-
PEAR・MDB2のモジュールロード...
-
phpのin_array()でわからない事...
-
PHP5の外部コマンド実行で、バ...
-
Mysqlとphpでソートや更新時の...
-
しりとり 無限ループ?
-
2次元配列の値の受け渡しについ...
-
if の中の 複数のor についてお...
-
pukiwikiのユーザ認証の設定で...
-
Zend_Form_Element_Hash
-
「ローマ字 -> ひらがな」へPHP...
-
プログラミングのPythonのnoteb...
おすすめ情報