繁体   English   中英

PHP中的多维数组排序

[英]multi-dimensional array sorting in php

$student_data = array(
array(
    "id" => 1,
    "student_name" => "Kasimir Clark",
    "country" => "Chile"
),
array(
    "id" => 2,
    "student_name" => "Kyle Myers",
    "country" => "Cook Islands"
),
array(
    "id" => 3,
    "student_name" => "Merrill Velez",
    "country" => "Israel"
),
array(
    "id" => 4,
    "student_name" => "Kadeem Graham",
    "country" => "Christmas Island"
),
);

usort($student_data, function($a, $b)
{
    return $a["student_name"] - $b["student_name"];
});

我需要在PHP中对多维数组进行排序。 可以按名称对国家进行排序吗? 我试图通过usort实现,但是我只能按一种条件(例如名称或国家/地区)进行排序。

我想实现类似MySQL数据库的功能。 就像是

SELECT * FROM STUDENT order by country,name

谢谢您的帮助。

使用array_multisort ,我在注释中找到了一个实现。

function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

$student_data = array(
    array(
        "id" => 1,
        "student_name" => "Kasimir Clark",
        "country" => "Chile"
    ),
    array(
        "id" => 2,
        "student_name" => "Kyle Myers",
        "country" => "Cook Islands"
    ),
    array(
        "id" => 3,
        "student_name" => "Merrill Velez",
        "country" => "Israel"
    ),
    array(
        "id" => 4,
        "student_name" => "Kadeem Graham",
        "country" => "Christmas Island"
    )
);


$sorted = array_orderby($student_data, 'country', SORT_ASC, 'student_name', SORT_ASC);

print_r($sorted);

此打印:

Array
(
    [0] => Array
        (
            [id] => 1
            [student_name] => Kasimir Clark
            [country] => Chile
        )

    [1] => Array
        (
            [id] => 4
            [student_name] => Kadeem Graham
            [country] => Christmas Island
        )

    [2] => Array
        (
            [id] => 2
            [student_name] => Kyle Myers
            [country] => Cook Islands
        )

    [3] => Array
        (
            [id] => 3
            [student_name] => Merrill Velez
            [country] => Israel
        )

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM