按字母数字排序php数组 [英] sorting a php array alphanumerically

查看:207
本文介绍了按字母数字排序php数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道php中有natsort()和natcasesort()函数可以对数组元素进行自然排序.我正在尝试对以下项目进行排序.

I know there are natsort() and natcasesort() functions in php to sort array elements in natural order. I am trying to sort the following items.

 array[0]= '10. xyz';
   array[1]=  '13. xyz';
   array[2]=  '2. xyz';
   array[3]=  '1a. xyz';
   array[4]=  '6. xyz';
   array[5]=  '1b. xyz';
   array[6]=  '4a. xyz';
   array[7]=  '4b. xyz';

现在,如果我应用natsort(),则将'10 ..'和'13 ..'放在'1a ..'上方.我怎样才能使我的PHP代码认为'10 ..'大于'1a ...'和'1a ...'应该在顶部?在我的特定情况下,正确的输出是:

now if I apply natsort(), '10..' and '13..' are placed above '1a..'. how can I make my php code to think that '10..' is greater than '1a...' and '1a...' should be at the top? the correct output in my particular case is:

'1a. xyz';
'1b. xyz';
'2. xyz';
'4a. xyz';
'4b. xyz';
'6. xyz';
'10. xyz';
'13. xyz';

我使用了自定义算法,但它的作用相同...它在"1a ..."之前放置"10 ..".这是我的自定义功能:

i used a custom algo but it does the same...it places '10..' before '1a...'. heres my custom func:

function cmp($a, $b) {
    $a_ex=explode(".",$a);
    $b_ex=explode(".",$b);
    if ($a_ex[0] == $b_ex[0] ) {
        return 0;
    }
    return ($a_ex[0] < $b_ex[0]) ? -1 : 1;
}

推荐答案

使用natsort():

Use natsort():

$array[0]= '10. xyz';
$array[1]=  '13. xyz';
$array[2]=  '2. xyz';
$array[3]=  '1a. xyz';
$array[4]=  '6. xyz';
$array[5]=  '1b. xyz';
$array[6]=  '4a. xyz';
$array[7]=  '4b. xyz';

natsort($array);

print_r($array);

这篇关于按字母数字排序php数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆