PHP按字母顺序排序数组,然后按数字排序?

PHP按字母顺序排序数组,然后按数字排序?,php,arrays,sorting,Php,Arrays,Sorting,我有一个数组 $test = array("def", "yz", "abc", "jkl", "123", "789", "stu"); 如果我在上面运行sort(),我会得到 Array ( [0] => 123 [1] => 789 [2] => abc [3] => def [4] => jkl [5] => stu [6] => yz ) 但我想看看 Array ( [0] =

我有一个数组

$test = array("def", "yz", "abc", "jkl", "123", "789", "stu");
如果我在上面运行
sort()
,我会得到

Array
(
    [0] => 123
    [1] => 789
    [2] => abc
    [3] => def
    [4] => jkl
    [5] => stu
    [6] => yz
)
但我想看看

Array
(
    [0] => abc
    [1] => def
    [2] => jkl
    [3] => stu
    [4] => yz
    [5] => 123
    [6] => 789
)

我尝试了
array\u reverse
,但这似乎没有改变任何事情。因此,我现在有点不知道如何最后得到数字,但按照顺序,您可以在排序之前将数字转换为整数:

$array = array("def", "yz", "abc", "jkl", "123", "789", "stu");

foreach ($array as $key => $value) {
    if (ctype_digit($value)) {
        $array[$key] = intval($value);
    }
}

sort($array);
print_r($array);
输出:

Array
(
  [0] => abc
  [1] => def
  [2] => jkl
  [3] => stu
  [4] => yz
  [5] => 123
  [6] => 789
)

在下面的代码中,将数据分成两个数组:一个是数值数组,另一个不是数值数组,并对其排序和合并

$arr1 = $arr2 = array();

$foreach ($arr as $val) {

if (is_numeric($val)) {array_push($arr2, $val); } 
else {array_push($arr1, $val);}

} 
因此,必须将数组分为数值数组和非数值数组

sort($arr2);
sort($arr1);

$test = array_merge($arr2,$arr1);

您需要的是排序,但需要使用自定义比较函数(usort)。 以下代码将完成此操作:

function myComparison($a, $b){
    if(is_numeric($a) && !is_numeric($b))
        return 1;
    else if(!is_numeric($a) && is_numeric($b))
        return -1;
    else
        return ($a < $b) ? -1 : 1;
} 
$test = array("def", "yz", "abc", "jkl", "123", "789", "stu");
usort ( $test , 'myComparison' );
函数myComparison($a,$b){
如果(是数字($a)&!是数字($b))
返回1;
如果(!是数字($a)和&是数字($b))
返回-1;
其他的
回报率($a<$b)?-1:1;
} 
$test=数组(“def”、“yz”、“abc”、“jkl”、“123”、“789”、“stu”);
usort($test,'myComparison');
您可以使用和自定义比较函数来完成这项工作,但这听起来麻烦太多了。我将使用
排序
,然后相应地处理输出。不清楚您想如何使用它,但一个简单的方法可能是:

sort($test);
foreach ($test as $index=>$value) {
    if (is_numeric($value)) {
       $test[] = $value;
       unset($test[$index]);
    } else {
        continue;
    }
}

usort
可能会更快,而且它将进行一次比较,而目前提到的其他解决方案可能会稍慢一些,因为它们需要在排序之前或之后迭代部分或全部数组

您可以尝试将数组分为两部分:字符串和整数,然后应用排序,然后将它们合并在一起。很多好的答案,都希望得到一个简单的函数,比如
sort()
,但是,我想下面的答案总的来说是有意义的。谢谢大家,我会给他们一个机会,然后回来看看哪一个最适合我的需要