2013-09-28 29 views

回答

1

如何关于:

$array = array('abc 1.0','abc 1.1.1','abc 1.1','xyz 1.1','def 2.0'); 
function fct($a, $b) { 
    list($al, $an) = explode(' ', $a); 
    list($bl, $bn) = explode(' ', $b); 
    if ($al == $bl) return version_compare($an, $bn); 
    return strcmp($al, $bl); 
} 
usort($array, 'fct'); 
print_r($array); 

输出:

Array 
(
    [0] => abc 1.0 
    [1] => abc 1.1 
    [2] => abc 1.1.1 
    [3] => def 2.0 
    [4] => xyz 1.1 
) 
0

的可能的解决方案定义自己的比较功能,并使用usort

<?php 
function cmp($a, $b) { 
    $a = preg_replace("/[^0-9,.]/", "", $a); 
    $b = preg_replace("/[^0-9,.]/", "", $b); 

    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 
$arr = array('abc 1.1', 'abc 1.0', 'abc 1.1.1'); 

usort($arr, "cmp"); 
print_r($arr); 
?> 

你可以想想更好比较算法如果需要

+0

更好的比较算法可能需要分割文件名和版本,然后使用[version_compare()](http://php.net/manual/en/function.version-compare.php) –

1
function csort($a, $b) { 
    $a = preg_split("/\s+/", $a); 
    $b = preg_split("/\s+/", $b); 
    return version_compare($a[1], $b[1]); 
} 

$r = array('abc 1.1', 'abc 1.0', 'abc 1.1.1'); 
usort($r, "csort"); 

或简单地

usort($r, "version_compare"); 
提议@onetrickpony

+1

'usort($ r,“ version_compare“);'应该工作得很好,不需要别的东西 –

+0

@onetrickpony tnx评论 –

相关问题