多维数组排序

示例数组

$arr = [
    ['key1'=> 940, 'key2'=>'blah'],
    ['key1'=>23, 'key2'=>'this'],
    ['key1'=>894, 'key2'=>'that']
];

自定义排序函数

  • 接收两个参数
  • 返回值表示哪个参数应该在前
  • 返回负数或false,则第一个在前 (注意正序,倒序)
  • 返回正数或true,则第二个在前
  • 返回0,则相等

调用函数

  • usort() 按值排序,不保留键
  • uasort() 按值排序,保留键
  • uksort() 按键排序

根据key1排序,数值

function asc_number_sort($x, $y) {
  if ($x['key1'] > $y['key1']) {//第一个大于第二个,返回true,则第二个在前,可见是正序排序,如果反过来则是倒序
  return true;
  } elseif ($x['key1'] < $y['key1']) {
  return false;
  } else {
  return 0;
  }
}
usort($arr, 'asc_number_sort');

根据key2排序,字符串

function string_sort($x, $y) {
    return strcasecmp($x['key2'], $y['key2']);//strcmp()区分大小写
}
usort($arr, 'string_sort');

在看一个例子

$students = [
  256 => ['name'=>'Jon', 'grade'=>98.5],
  2 => ['name'=>'Vance', 'grade' =>85.1],
  9 => ['name'=>'Stephen', 'grade'=>94.0],
  364 => ['name'=>'Steve', 'grade'=>85.1],
  68 => ['name'=>'Rob', 'grade'=>74.6]
];
function name_sort($x, $y) {
  return strcasecmp($x['name'], $y['name']);//strcasecmp()返回一个数值,如果是负数,则第一个在前,如果是正数,则第二个在前,如果0,则相等
}
function grade_sort($x, $y) {
  return $x['grade'] < $y['grade'];//小于返回true,则第二个在前,倒序
}
uasort($students, 'name_sort');//保留学生id
本作品采用《CC 协议》,转载必须注明作者和本文链接
六月的风
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!