[英]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.