我在文件夹中有一些文件如下:
ss1.txt, ss2.txt, .., ss9.txt, ss10.txt, ss11.txt, .., ss19.txt, ss20.txt
。
当我尝试使用preg_match获取这些文件时,我按顺序得到了结果:
ss1.txt, ss10.txt, ss11.txt, ... ss19.txt, ss2.txt, ss20.txt
。
我需要的完全如下:
ss1.txt, ss2.txt, .., ss9.txt, ss10.txt, ss11.txt, .., ss19.txt, ss20.txt
。
我使用的表达方式如下:
'/_ss[1-9]+\.txt/'
答案 0 :(得分:0)
首先建立前0-9场比赛的列表:
<?php
$files = array("ss1.txt", "ss2.txt", "ss14.txt");
$sorted = array();
$a_string = "";
foreach ($files as &$file) {
preg_match ('/_ss[1-9]\.txt/', file, matches)
$a_string = $matches[0];
if (isset($a_string)) {
array_push($sorted, $a_string); } }
unset($file);
然后建立第二个11-20场比赛名单:
foreach ($files as &$file) {
preg_match ('/_ss[0-9][0-9]\.txt/', file, matches)
$a_string = $matches[0];
if (isset($a_string)) {
array_push($sorted, $a_string); } }
unset($file);
?>
另一种方法可能是使用preg_match_all
返回两个匹配列表而不进行循环,但前提是您的数据已经在一个大字符串中(或者您想要转换它)。
$giant_text = join (" ", $files)
$list_of_single_dig = preg_match_all('/_ss\d\.txt/', $giant_text, $matches);
$list_of_double_dig = preg_match_all('/_ss\d\d\.txt/', $giant_text, $matches);
$sorted = array_merge ($list_of_single_dig, $list_of_double_dig)
答案 1 :(得分:0)
查看natsort
$sorted = natsort($unsorted_files);