プロが教えるわが家の防犯対策術!

PHPでファイル一覧を表示させますプログラムを作成していまして、こちらのサイトさん
https://www.saaria.info/archives/1111
を丸々コピーして、以下のように表示させますことは出来ました。

ー担当者1
 +20210217-100557_顧客名
 +20210217-101136_顧客名
+担当者2
+担当者3

ここで、フォルダ名に日付をつけて管理しているのですが、現在、日付の古いフォルダが
上に表示されております。
これを、日付の新しいフォルダを上に表示させたいのですが、プログラム中の変数を
array_reverseで反転させてみましても上手く動いてくれません。

プログラムのどこをどのようにいじれば良いのか教えて頂きたいと思います。

質問者からの補足コメント

  • うーん・・・

    質問本文に書きましたサイトさんの

    while (false !== ($file = readdir($handle)))

    を、

    while (false !== ($file = readdir($handle))) {
    $dir_sort[] = $file ;
    }
    rsort($dir_sort);

    foreach ( $dir_sort as $file )

    としまして、$dir_sortという配列を作りましたところ、
    ー担当者1
     +20210217-101136_顧客名
     +20210217-100557_顧客名
    と、期待通りに逆順ソートされてくれました。
    しかし、
    +担当者3
    +担当者2
    +担当者1
    としまして、担当者名まで逆順ソートされてしまいました。(残念)
    この辺りご存じでしょうか?

      補足日時:2021/02/18 10:10

A 回答 (5件)

こちらで確認したソースです。

このようになってますか。
このサイトはインデントが崩れるので、下記URLにアップしました。
$path = '/???/???/???/';はあなたの環境に合わせて適切に設定してください。
https://ideone.com/xZd85r
    • good
    • 0
この回答へのお礼

ありがとうございます。
出来ました♪

お礼日時:2021/02/19 17:55

rsort($dir_sort);の行を、以下の行で置き換えます。



$dir_sortが空でない場合、
0番目の要素の先頭8文字が数字なら、降順でソートします。
そうでないなら、昇順でソートします。
---------------------------------------------------
if (count($dir_sort) > 0){
if (preg_match('/^\d{8}/',$dir_sort[0]) == 1){
rsort($dir_sort,SORT_STRING);
}else{
sort($dir_sort,SORT_STRING);
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
ちょこっと動きませんでしたので、if文とif文の間に

if (count($dir_sort) > 0){
var_dump($dir_sort[0]);
if (preg_match('/^\d{8}/',$dir_sort[0]) == 1){

としましたら、

string(1) "." string(1) "." …文字数の関係で省略…

としまして、下のif文でパターンマッチ出来ませんでしたです…

お礼日時:2021/02/19 17:32

フォルダを全て無条件に降順にソートした場合は、そうなります。


現在、
+担当者1
+担当者2
+担当者3
となっているのは、たまたまかと思います。
こちらは、昇順にソートをしたほうが良いかと思います。
+20210217-101136_顧客名
+20210217-100557_顧客名
のソートですが、
$dir_sort の先頭の要素を取り出して、先頭8文字が数字であれば、
降順ソートするようにしてはいかがでしょうか。
(もっと厳密にしたいなら先頭8文字が数字、次がハイフン、次が数字6文字)
    • good
    • 0
この回答へのお礼

ありがとうございます。
親フォルダ(担当者1~3)は昇順にして(現在たまたま昇順と同じ表示)
その子フォルダ(20210217-xxxxxx)は降順って難しそうですが
何とかなりそうですかね。

お礼日時:2021/02/19 17:00

降順にするのはフォルダだけですか。


ファイルはいまのままでよいですか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ー担当者1(フォルダ)
 +20210217-100557_顧客名(フォルダ)
 +20210217-101136_顧客名(フォルダ)
としてありますうち、日付のあります20210217-HHMMSS_顧客名
の表示を降順にしたいです。

お礼日時:2021/02/18 09:04

array_reverseは配列の中身を反転させるだけなので全然使い方違います。


readdir()はファイルシステムに格納されている順に読み込むので、読み込んだファイル名は常に特定ルールによってソートされたものとは限りません。

下記を参考に、状況に合わせてsort、rsrot、array_multisortあたりを使ってください。
https://www.sejuku.net/blog/51222
https://kido0617.github.io/php/2013-01-06-file-s …
    • good
    • 0
この回答へのお礼

すみません、なにぶん素人ですので、具体的に挿入位置を教えて頂けますと嬉しく思います。

お礼日時:2021/02/17 13:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!