$array = array(
'list1 - 1',
'list7 - 1',
'list5 - 2',
'list3 - 1'
);
我需要用数字排序这个数组。该函数应检查等号后的值以进行排序。
结果:
list1 - 1
list7 - 1
list3 - 1
list5 - 2
在上面的结果中,在list[5]
之前,顺序不会按字母顺序或数字顺序更改。我该怎么做?
答案 0 :(得分:3)
创建自定义排序并通过usort
函数
function mysort($a,$b)
{
$a = substr($a,-1,1);
$b = substr($b,-1,1);
if ($a == $b)
{
return 0;
}
return ($a < $b) ? -1 : 1;
}
然后将其传递给使用您的数组的usort:
usort($myarray, "myarray");
-
您要求很难完成,因为您想要对没有逻辑标识符的数组进行排序,我们的思想会尽可能地解释您的结果但不创建矩阵,难以实现的硬编码概念,您最好的选择如果该类总是与上面完全相同,那么手动执行此操作:
$temp = $array[3];
$array[3] = $array[4];
$array[4] = $temp;
答案 1 :(得分:2)
看起来您想首先搜索尾随数字,但如果它们相同则您希望保留项目的原始顺序。这意味着需要更多的思考,但实质上,这项工作仍然非常简单。
$array = array(
'list1 - 1',
'list7 - 1',
'list5 - 2',
'list3 - 1',
);
function sort_list(&$subject) {
// Get an array of the trailing numbers to use within the callback
$nums = preg_replace('/^.* - (\d+)$/', '$1', $subject);
// Sort values by trailing number or key
uksort($subject, function($a,$b) use ($nums) {
// If numbers are the same, sort by key
if ($nums[$a] === $nums[$b]) {
return $a - $b;
}
// Othwerise sort by numbers
return $nums[$a] - $nums[$b];
});
}
sort_list($array);
var_dump($array);
输出类似:
array(4) {
[0]=>
string(9) "list1 - 1"
[1]=>
string(9) "list7 - 1"
[3]=>
string(9) "list3 - 1"
[2]=>
string(9) "list5 - 2"
}
答案 2 :(得分:1)
其中$array
是数组的名称。如果数字大于1位,则此功能有效。
function custom_sort($a, $b)
{
$exp = '/(\d+)$/';
preg_match($exp, $a, $a);
preg_match($exp, $b, $b);
return intval($a[1]) - intval($b[1]);
}
usort($array, 'custom_sort');
答案 3 :(得分:-1)
function mySort($array) {
foreach ($array as $key => $value) {
$array[$key] = explode(" - ", $array[$key]);
$data[$value] = $array[$key][1];
}
asort($data);
}