1

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

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

与 rightmove 文件类似,文本文件末尾有一个“序列”值,

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

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

我想做的是使用 sub_str() 去除除最后 6 个字符之外的所有字符,并使用它来对数组进行排序。

将新的 6 字符有序数组与先前的“原始数据”数组结合并以相同方式对其进行排序的最佳方法是什么?

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

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

一切顺利,

吉姆

4

2 回答 2

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
)
于 2013-06-05T16:09:58.933 回答
0

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

使用已知的排序算法,但不是比较数组单元格的整个值,而是比较它的“剥离”版本。“切换”部分可以像往常一样在整个单元上完成。为了比较,我什至只关注序列号,不包括扩展名。请注意,这意味着您的序列不会超过 99...

于 2013-06-05T16:09:58.703 回答