在字符串前排序数组数字?

时间:2015-10-16 09:46:52

标签: php arrays sorting

我无法对数组进行排序,以便数字出现在-(连字符)之前。

今天我的阵列:

Array
(
    [-] => Test
    [0] => Test
    [1] => Test
    [2] => Test
)

我想要的订单:

Array
(

    [0] => Test
    [1] => Test
    [2] => Test
    [-] => Test
)

我在这里和谷歌都搜索过。但没有找到答案。我尝试过ksort()usort(),但没有成功。

3 个答案:

答案 0 :(得分:4)

您可以使用uksort创建自己的比较函数,该函数处理此类特殊情况。

uksort($a, function($a, $b) {
   if (is_numeric($a) && is_numeric($b)) return $a - $b;
   else if (is_numeric($a)) return -1;
   else if (is_numeric($b)) return 1;
   return strcmp($a, $b);
});

答案 1 :(得分:4)

使用natural order sorting function

natsort()

示例:

$arr = ['_', 6, 3, 5];
natsort($arr);
print_r($arr);

<强>输出:

Array
(
    [2] => 3
    [3] => 5
    [1] => 6
    [0] => _
)

如果您想按键排序,那么您可以使用带标志 SORT_NATURAL ksort($arr, SORT_NATURAL);

的ksort()函数

示例:

$arr = [
   '_' => 'test',
    6  => 'test', 
    3  => 'test', 
    5  => 'test'
];

ksort($arr, SORT_NATURAL);

答案 2 :(得分:0)

功能检查($ x,$ y){
    if(is_numeric($ x)&amp;&amp;!is_numeric($ y))
        返回1;
    否则if(!is_numeric($ x)&amp;&amp; is_numeric($ y))
        返回-1;
    否则
        返回($ x&lt; $ y)? -1:1;
} $ array = array(“ - ”,“1”,“2”,“3”);
usort($ array,'check');