php 二维数组按某个键值排序,二维数组排序
方法一 以单列值排序:
其中 array_column(数组,数组中的某个键值) 从多维数组中取出某个键值的一列 返回一个一维数组;
array_multisort(数组(一维数组),排序方式(SOTR_ASC,SOTR_DESC),其他数组(可以是二维的))
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$arr=[ array( 'name'=>'先生织的不是梦', 'age'=>28 ), array( 'name'=>'先生织的不是梦2', 'age'=>14 ), array( 'name'=>'先生织的不是梦3', 'age'=>59 ), array( 'name'=>'先生织的不是梦4', 'age'=>23 ), array( 'name'=>'先生织的不是梦5', 'age'=>23 ), array( 'name'=>'先生织的不是梦6', 'age'=>21 ), ]; array_multisort(array_column($arr,'age'),SORT_DESC,$arr); print_r($arr); |
方法二 以多列值排序:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/** * 二维数组以下级元素值排序(支持以多列排序) * * http://php.net/manual/zh/function.array-multisort.php * * @return mixed * * 示例: * $data[] = array('volume' => 67, 'edition' => 2); * $data[] = array('volume' => 86, 'edition' => 1); * $data[] = array('volume' => 85, 'edition' => 6); * $data[] = array('volume' => 98, 'edition' => 2); * $data[] = array('volume' => 86, 'edition' => 6); * $data[] = array('volume' => 67, 'edition' => 7); * * // 传递数组,后跟列名和排序标志 * $sorted = array_orderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC); * print_r($sorted); ///// * */ 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); } |