1

我正在寻找一种更好的优化方法来从文件名数组中查找和分组多部分档案

例如,我有一个输入:

array(
books.part1.rar,
books.part3.rar,
00000114.rar,
svoy_20ostrov.rar,
svoy_20ostrov.rar,
koncert_20v_20dk_20mir.rar,
koncert_20v_20centralnom_20teatre_20kukol.rar,
LP_LIVE_PR_Tampa.part2.rar,
koncert_20v_20dk_20vami.rar,
koncert_20v_20dk_20kommuna_20chast1.rar,
books.part2.rar,
koncert_20v_20dk_20kommuna_20chast2.rar,
books.part4.rar,
recedivist.rar,
LP_LIVE_PR_Tampa.part1.rar
)

我正在寻找输出

array(  

array(

books.part1.rar
books.part2.rar
books.part3.rar
books.part4.rar ) ,

00000114.rar
svoy_20ostrov.rar
koncert_20v_20dk_20mir.rar
koncert_20v_20centralnom_20teatre_20kukol.rar
koncert_20v_20dk_20vami.rar

array(
koncert_20v_20dk_20kommuna_20chast1.rar
koncert_20v_20dk_20kommuna_20chast2.rar
)

recedivist.rar
array (
LP_LIVE_PR_Tampa.part1.rar
LP_LIVE_PR_Tampa.part2.rar
)
)

顺便说一句,我使用 php 作为编程语言,

一个想法是匹配正则表达式文件,如 (.+).part1.rar 然后当找到时,匹配所有其他部分 ([0-9]+).rar (其他 foreach 需要遍历所有数组)以及何时找到 unset() 那些条目并将它们添加到新构造的数组中

4

2 回答 2

2

为什么不对数组进行排序?然后您所要做的就是检测字符串的开头何时更改以查看新集合何时开始。

于 2010-07-27T06:09:19.883 回答
2

我会先对数组进行排序,然后循环遍历它,在下一个条目上执行 Levenshtein() 函数。

$rars = array(
    books.part1.rar,
    books.part3.rar,
    00000114.rar,
    svoy_20ostrov.rar,
    svoy_20ostrov.rar,
    koncert_20v_20dk_20mir.rar,
    koncert_20v_20centralnom_20teatre_20kukol.rar,
    LP_LIVE_PR_Tampa.part2.rar,
    koncert_20v_20dk_20vami.rar,
    koncert_20v_20dk_20kommuna_20chast1.rar,
    books.part2.rar,
    koncert_20v_20dk_20kommuna_20chast2.rar,
    books.part4.rar,
    recedivist.rar,
    LP_LIVE_PR_Tampa.part1.rar
)

sort($rars);
$current = 0;
$rars_complete = array();
foreach($rars as $i=>$rar) {
    $next = ($i + 1) < count($rars)) ? $i + 1 : false;
    $rars_complete[$current][] = $rar;
    if($next != false && levenshtein($rar, $rars[$next]) == 1)
        continue;
    else
        $current++;
}

请注意,这未经测试。

于 2010-07-27T06:18:05.733 回答