日付、時間の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の内容...
-
要素(文字列)から指定値を検索
-
日付、時間の2段階でソート
-
file_get_contentsなどでrefere...
-
テキストボックスの日本語をロ...
-
配列をループでたくさん宣言し...
-
ヒアドキュメントの中のfor文
-
file_existsでファイル名の部分...
-
[PHP] fputcsv()関数でファイル...
-
PHP 多次元配列変数のデータ受...
-
doxygenを使用する環境について
-
PHPのPOSTでの半角スペース
-
別ファイルの構造体の値を読み...
-
多次元配列を、1次元の配列にす...
-
PHPについて教えて下さい。
-
C言語で全角文字の扱いについて
-
文字列の文字一文字ずつを解析...
-
連想配列でキーを利用して一部...
-
PHPのセレクトボックスの初期値...
-
【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...
おすすめ情報