按名称的一部分订购文件

时间:2013-06-05 16:04:11

标签: php arrays

我有一个包含files =>文件名的数组,如下所示:

$provider1 = ('dnnbzdas04.txt','haethae09.txt','dhsdshnsd05.txt',...,'zdbtebt03.txt');

与右移文件类似,文本文件末尾有“序列”值,

文件确实有未知的文件名但是'序列'总是设置,我需要重新排序数组,结果是:

$provider1Ordered = ('hst45ga01.txt','dfa454ba02.txt','zdbtebt03.txt',...,'haethae09.txt');

我要做的是使用sub_str()除去最后6个字符以外的所有字符并使用它来排序数组。

将新的6个字符有序数组与前一个'rawdata'数组结合并以相同方式排序的最佳方法是什么?

  • 哦,是的,随机字符也包含整数,没有固定的文件名长度,我唯一确定的是最后的序列号。

请指点,帮助或任何我会非常感激。

一切顺利,

吉姆

2 个答案:

答案 0 :(得分:2)

您可以使用usort执行此操作。例如

$provider1 = array('dnnbzdas04.txt','haethae09.txt','dhsdshnsd05.txt','zdbtebt03.txt');

usort($provider1, function($a, $b) {
    $a = substr($a, -6, 2);
    $b = substr($b, -6, 2);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});

print_r($provider1);

这将输出:

Array
(
    [0] => zdbtebt03.txt
    [1] => dnnbzdas04.txt
    [2] => dhsdshnsd05.txt
    [3] => haethae09.txt
)

答案 1 :(得分:0)

我会做的是基于你最初的想法:

使用已知的sorting algorithm,但不是比较数组单元格的整个值,而是比较&#34;剥离的&#34;它的版本。 &#34;切换&#34;像往常一样,可以在整个细胞上完成。为了进行比较,我甚至只关注序列号,不包括扩展名。但要小心,这意味着你的序列不会超过99 ......