PHP:使用字符后的数字对数组进行排序

PHP:使用字符后的数字对数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,我有一个值数组,我想按字母顺序排序,但数字是按字符排序的 例如,给定以下字符串: Core 2 Duo, Core Duo, Core Quad, Core 4 Quad 我希望最后的订单是这样的: Core Duo, Core 2 Duo, Core Quad, Core 4 Quad 相反,PHP的sort()函数对其进行如下排序: Core 2 Duo, Core 4 Quad, Core Duo, Core Quad 自然排序返回与常规排序相同的结果 那么,有没有什么方法可以告诉P

我有一个值数组,我想按字母顺序排序,但数字是按字符排序的

例如,给定以下字符串:

Core 2 Duo, Core Duo, Core Quad, Core 4 Quad
我希望最后的订单是这样的:

Core Duo, Core 2 Duo, Core Quad, Core 4 Quad
相反,PHP的sort()函数对其进行如下排序:

Core 2 Duo, Core 4 Quad, Core Duo, Core Quad
自然排序返回与常规排序相同的结果


那么,有没有什么方法可以告诉PHP类似“如果遇到一个数字,将其排序为在Z之后”

似乎您所追求的是一个将字符串的所有数字元素推到后面的函数,例如“Core 2 Duo”=>“Core Duo 2”


似乎您所追求的是一个将字符串的所有数字元素推到后面的函数,例如“Core 2 Duo”=>“Core Duo 2”

以下是您的解决方案:

<?php

$array = array('Core 2 Duo', 'Core Duo', 'Core Quad', 'Core 4 Quad');

$tempArray = array();
foreach($array as $key=>$value) {
    $exp = explode(" ",$value); 
    if(count($exp)==3) {
        $tempArray[$key] = $exp[0]." ".$exp[2]." ".$exp[1];
    } else {
        $tempArray[$key] = $exp[0]." ".$exp[1]." "."-1";
    }
}

asort($tempArray);

$sortedArray = array();
foreach($tempArray as $key=>$value) {
    $sortedArray[] = $array[$key];
}

print_r($sortedArray);

?>
以下是您的解决方案:

<?php

$array = array('Core 2 Duo', 'Core Duo', 'Core Quad', 'Core 4 Quad');

$tempArray = array();
foreach($array as $key=>$value) {
    $exp = explode(" ",$value); 
    if(count($exp)==3) {
        $tempArray[$key] = $exp[0]." ".$exp[2]." ".$exp[1];
    } else {
        $tempArray[$key] = $exp[0]." ".$exp[1]." "."-1";
    }
}

asort($tempArray);

$sortedArray = array();
foreach($tempArray as $key=>$value) {
    $sortedArray[] = $array[$key];
}

print_r($sortedArray);

?>

顺便说一句,这里没有
core4quad
,但是有
core2quad
,老实说,这实际上没有意义。如果字母的排序值高于数字,为什么
Core Quad
会介于
Core 2 Duo
Core 4 Quad
之间?你能提供一个更大的集合,说明你希望它如何排序,以便确定一个更通用的算法吗?你应该试试,顺便说一句,没有
Core 4 Quad
,但是有
Core 2 Quad
,老实说,这实际上没有意义。如果字母的排序值高于数字,为什么
Core Quad
会介于
Core 2 Duo
Core 4 Quad
之间?你能不能提供一个更大的集合,说明你希望它如何排序,以便确定一个更通用的算法?把它们推到后面,这真的很聪明。把它们推到后面,这真的很聪明。
Array
(
    [0] => Core Duo
    [1] => Core 2 Duo
    [2] => Core Quad
    [3] => Core 4 Quad
)