Php 自定义排序数组
我需要对这个数组进行数字排序。函数应检查等号后的值以进行排序Php 自定义排序数组,php,arrays,sorting,Php,Arrays,Sorting,我需要对这个数组进行数字排序。函数应检查等号后的值以进行排序 结果: 在上面的结果中,顺序在list[5]之前不会按字母顺序或数字顺序更改。如何执行此操作?创建自定义排序并通过usort函数执行 list1 - 1 list7 - 1 list3 - 1 list5 - 2 -- 您的请求很难完成,因为您希望对没有逻辑标识符的数组进行排序,我们的思维尽可能解释您的结果,但不创建矩阵,硬编码的概念很难完成,您最好的选择是,如果类始终与上述完全相同,则手动执行此操作: usort($myar
结果:
在上面的结果中,顺序在
list[5]
之前不会按字母顺序或数字顺序更改。如何执行此操作?创建自定义排序并通过usort
函数执行
list1 - 1
list7 - 1
list3 - 1
list5 - 2
--
您的请求很难完成,因为您希望对没有逻辑标识符的数组进行排序,我们的思维尽可能解释您的结果,但不创建矩阵,硬编码的概念很难完成,您最好的选择是,如果类始终与上述完全相同,则手动执行此操作:
usort($myarray, "myarray");
Ref:创建自定义排序,并通过
usort
函数执行
list1 - 1
list7 - 1
list3 - 1
list5 - 2
--
您的请求很难完成,因为您希望对没有逻辑标识符的数组进行排序,我们的思维尽可能解释您的结果,但不创建矩阵,硬编码的概念很难完成,您最好的选择是,如果类始终与上述完全相同,则手动执行此操作:
usort($myarray, "myarray");
Ref:其中
$array
是数组的名称。如果数字大于1位,则此功能有效
function mySort($array) {
foreach ($array as $key => $value) {
$array[$key] = explode(" - ", $array[$key]);
$data[$value] = $array[$key][1];
}
asort($data);
}
其中,
$array
是数组的名称。如果数字大于1位,则此功能有效
function mySort($array) {
foreach ($array as $key => $value) {
$array[$key] = explode(" - ", $array[$key]);
$data[$value] = $array[$key][1];
}
asort($data);
}
看起来您希望首先搜索尾随数字,但如果它们相同,则希望保留项目的原始顺序。这意味着需要更多的思考,但从本质上讲,这项工作仍然非常简单
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');
输出类似于:
$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);
看起来您希望首先搜索尾随数字,但如果它们相同,则希望保留项目的原始顺序。这意味着需要更多的思考,但从本质上讲,这项工作仍然非常简单
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');
输出类似于:
$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);
你是说你想按键排序吗?(类似于列表1-1、列表3-1、列表5-2、列表7-1)@Damien Pirsy:不,不是按键,我想把列表5移到列表底部,因为它包含数字2。你的意思是要按键排序吗?(类似于list1-1、list3-1、list5-2、list7-1)@Damien Pirsy:不,我想移动列表底部的list5,因为它包含数字2。你应该更好地命名这个比较函数
mycompare
,或者更好的按最后一个字节进行比较。
。OP可能对我有不同的命名约定,所以我保持简单明了。@RobertPitt:如果你看数组,你会发现list1是第一个,list7是第二个,list3是第三个。我希望它按这个顺序。这必须手动完成,因为没有任何东西可以在语法上区分order@RobertPitt:是的,刚刚弄明白你应该更好地命名这个比较函数,或者更好的按最后一个字节进行比较。
。OP可能对我有不同的命名约定,所以我保持简单明了。@RobertPitt:如果你看数组,你会发现list1是第一个,list7是第二个,list3是第三个。我希望它按这个顺序。这必须手动完成,因为没有任何东西可以在语法上区分order@RobertPitt:是的,刚刚得到一个数字,它的大纲3在列表的顶部,我需要它移到底部——如在列表7之后和列表5之前。见我上面的问题。list1必须保持在第一个List3位于列表的顶部,我需要将它移到底部——如list7之后和list5之前。见我上面的问题。列表1必须保持第一位