Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自定义排序数组_Php_Arrays_Sorting - Fatal编程技术网

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必须保持第一位