##やりたいこと
指定した範囲内の数字と、ファイル名の文字列が部分一致するファイルを一覧として表示したい
###以下例
10~20のいずれかの文字列をファイル名に含むファイルを一覧として出力したい場合
###フォルダにあるファイル(一例)
5-test.txt
11-test.txt
15-test.txt
18-test.txt
20-test.txt
21-test.txt
###上記フォルダから欲しいファイル
11-test.txt
15-test.txt
18-test.txt
20-test.txt
###変数に欲しい範囲の数値を指定(変動)
$start = 10;
$end = 20;
この場合の10~20の数値部分が一致するファイルだけ出力
##問題点
今現状だと「10-test.txt」だけを出力するようになっている
php
1if ( strpos( $file, $start ) === false ) { 2 //無かった場合はなにもしない 3} else { 4 echo $file . " (" . $path . ")" . "\n" ; 5}
これを「10~20で一致したもの」に変更したいが、書き方がわからない
現状の全体のphpは以下
php
1$start = $_POST['request01']; // ajaxで受け取った最小値 2$end = $_POST['request02']; // ajaxで受け取った最大値 3$dir = '../hoge/'; // ディレクトリのパス 4 5$check_dirs = [ $dir ] ; 6$file_paths = [] ; 7 8 while( $check_dirs ) { 9 $dir_path = $check_dirs[0] ; 10 11 if( is_dir ( $dir_path ) && $handle = opendir ( $dir_path ) ) { 12 while( ( $file = readdir ( $handle ) ) !== false ) { 13 if( in_array ( $file, [ ".", ".." ] ) !== false ) continue ; 14 $path = rtrim ( $dir_path, "/" ) . "/" . $file ; 15 16 if ( filetype ( $path ) === "dir" ) { 17 $check_dirs[] = $path ; 18 } else { 19 // 文字列が含まれるかどうかチェック 20 if ( strpos( $file, $start ) === false ) { 21 //無かった場合はなにもしない 22 } else { 23 echo $file . " (" . $path . ")" . "\n" ; 24 } 25 } 26 } 27 } 28 29 array_shift( $check_dirs ) ; 30 } 31 print_r($file);
参考にしたコード
※以下サイトの下部にあるデモコード(再帰的に取得の部分)
https://lab.syncer.jp/Web/PHP/Snippet/16/
※補足
上記は一例のため1020としているが、実際は10万ファイル以上の中からふるいにかけるため、39000」のような変数になる
実際の使用の際には「32000
また、今回はindex.htmlにinputタグを2個設け、jquery・Ajaxを使用してphpに指定値を送り
変数の$startと$endに格納している。
※追記
コメントいただいたため追記します。
>10万ファイル以上の中からふるいにかける
この10万ファイルは様々な階層にフォルダ分けされています。
そのため参考サイトの「再帰的に取得」を使用しています。
さらに、今回の例ではファイル名の形式は
〇〇-test.txtしかありませんでしたが実際には拡張子は様々で、
・test-〇〇.jpg
・hogehoge〇〇hoge.gif
など数値は必ず入っているものの形式がまちまちです。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/11 09:21
2019/04/11 10:17
2019/04/11 10:31