2015-06-21 34 views
1

我想按照PHP代码升序排列varchar数组数组。
我曾尝试这样做,我得到的结果是:PHP按升序排序Varchar数组数组

ABC1 
ABC10 
ABC11 
ABC11A 
ABC11B 
ABC2 
ABC2A 
ABC20 
ABC3 

但我想:

ABC1 
ABC2 
ABC2A 
ABC3 
ABC10 
ABC11 
ABC11A 
ABC11B 
ABC20 

有什么办法来实现这一目标?

+7

阅读[文件](http://php.net/sort),并密切关注排序标志,或看看[natsort()](http://php.net/manual/en/function.natsort.php)。 –

+0

您是否尝试仅基于字母进行排序并忽略字符串中的数字值? – shunya

+0

感谢您的快速指导。 – dheeraj

回答

1
$myarray= array("ABC1","ABC10","ABC11","ABC11A","ABC11B","ABC2","ABC2A","ABC20","ABC3"); 

natsort($myarray); 
var_dump($myarray); 

结果

array(9) { 
    [0]=> 
    string(4) "ABC1" 
    [5]=> 
    string(4) "ABC2" 
    [6]=> 
    string(5) "ABC2A" 
    [8]=> 
    string(4) "ABC3" 
    [1]=> 
    string(5) "ABC10" 
    [2]=> 
    string(5) "ABC11" 
    [3]=> 
    string(6) "ABC11A" 
    [4]=> 
    string(6) "ABC11B" 
    [7]=> 
    string(5) "ABC20" 
} 

UPDATE由于意见讨论

$keys = array_keys($myarray); 
natsort($keys); 
$newarray = array(); 
foreach ($keys as $k) $newarray[] = $myarray[$k]; 
+0

问题中所述,在我的情况下,natsort()不工作,因为我有多维数组: 'array( \t 'BFIMO1'=>数组( \t \t '设备'=>数组( \t \t \t 'equipID'=> 'BFIMO1', \t \t \t 'NAME'=> '3000A主要Breaker- 277/480V主', \t \t \t'location'=>'Basement-SwGear Room', \t \t \t '意见'=> '3000A主要Breaker- 277/480V主', \t \t \t 'PPE'=>空 \t \t) \t) \t 'BFIMO10'=>数组( \t \t“设备'=>数组( \t \t \t 'equipID'=> 'BFIMO10', \t \t \t 'NAME'=> '冷却器泵', \t \t \t '位置'=>' Basement- SwGear房”, \t \t \t '意见'=> '冷却侧泵', \t \t \t 'PPE'=>空 \t \t) \t),' 我得到数组字符串转换错误 – dheeraj

+0

你想将这个键“BFIMO1”排序? – splash58

+0

是的,我有钥匙'BFIMO1 BFIMO10 BFIMO2'等等。我想按顺序排列这些。 – dheeraj