Php 按两个用户定义的值对多维数组排序

Php 按两个用户定义的值对多维数组排序,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我需要按两个值对多维数组进行排序 例如,数组中有4个键 Array( Array ( [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42 [1] => downloading [2] => Title [3] => 60 ) Array ( [0] => 4B642D022980E5EBAA7CF4B6E

我需要按两个值对多维数组进行排序

例如,数组中有4个键

Array(
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => downloading
        [2] => Title
        [3] => 60
    )
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => downloading
        [2] => Title
        [3] => 30
    )
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => paused
        [2] => Title
        [3] => 30
    )
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => completed
        [2] => Title
        [3] => 100
    )
)
是否有一种方法可以对数组进行排序,这样它可以先对键完成的数组进行排序,然后下载第二个,然后暂停第三个,然后还可以对包含下载的数组进行排序,并通过
3
键从100暂停到0

期望的产出将是

Array(
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => completed
        [2] => Title
        [3] => 100
    )
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => downloading
        [2] => Title
        [3] => 60
    )
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => downloading
        [2] => Title
        [3] => 30
    )
    Array
    (
        [0] => 4B642D022980E5EBAA7CF4B6E1CC93769921CB42
        [1] => paused
        [2] => Title
        [3] => 30
    )
)
这就是你需要的

它是一种允许您定义自己的回调函数的排序

然后,uksort使用此回调函数对数组进行重新排序

您需要编写一个函数,根据两个标准对数组进行排序

第一个是数组标记1处字段的字母顺序(包含单词completed,downloading,…),如果是tie,则使用数组标记3处的字段并按降序排序

最后,需要将创建的函数作为参数传递给uksort


希望有帮助!:)

您需要重新格式化数组并使用array\u multisort。它还将使思考更具可读性:

<?php $ar = Array(
    Array(
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "completed",
        "title" => "Title",
        "rank" => "100",
    ),
    Array
    (
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "downloading",
        "title" => "Title",
        "rank" => "60",
    ),
    Array
    (
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "downloading",
        "title" => "Title",
        "rank" => "30",
    ),
    Array
    (
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "paused",
        "title" => "Title",
        "rank" => "30",
    ),
);
var_dump($ar);
foreach ($ar as $key => $row) {
    $status[$key] = $row['status'];
    $rank[$key] = $row['rank'];
}

array_multisort($status, SORT_ASC, $rank, SORT_DESC, $ar);
var_dump($ar);

这个问题有点缺乏信息。您能分享一下您的尝试吗?您遇到了哪些问题?请看一看,我知道如何对基本数组进行排序,但遗憾的是,我不知道从何处开始对这样一个更复杂的数组进行排序。
<?php $ar = Array(
    Array(
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "completed",
        "title" => "Title",
        "rank" => "100",
    ),
    Array
    (
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "downloading",
        "title" => "Title",
        "rank" => "60",
    ),
    Array
    (
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "downloading",
        "title" => "Title",
        "rank" => "30",
    ),
    Array
    (
        "id" => "4B642D022980E5EBAA7CF4B6E1CC93769921CB42",
        "status" => "paused",
        "title" => "Title",
        "rank" => "30",
    ),
);
var_dump($ar);
foreach ($ar as $key => $row) {
    $status[$key] = $row['status'];
    $rank[$key] = $row['rank'];
}

array_multisort($status, SORT_ASC, $rank, SORT_DESC, $ar);
var_dump($ar);