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
)