我们经常会遇到根据二维数组的某个键值来排序,然后突然想到onethink项目中有个函数,于是抽离出来,作为参考。
2014-05-22 17::15 看了热心phper的评论补充如下内容: 推荐使用php原生的array_multisort()函数,执行速度会快些且降低自定义函数的依赖 官方文档讲解比较难理解,不懂的朋友可以使用 大白话讲解(百度知道):http://zhidao.baidu.com/link?url=Ljv-21fnK2CZkd03nPxb7uB7owjApdWilxZlmCcZKQqTB5AeI_BsdhyCEIaa5gWl3o9xJ2WtX8m65avJFmR9CK
- /**
- * 对查询结果集进行排序
- * http://www.onethink.cn
- * /Application/Common/Common/function.php
- *
- * @access public
- * @param array $list 查询结果
- * @param string $field 排序的字段名
- * @param string $sortby 排序类型 (asc正向排序 desc逆向排序 nat自然排序)
- * @return array
- */
- if (! function_exists('list_sort_by'))
- {
- function list_sort_by($list, $field, $sortby = 'asc')
- {
- if (is_array($list))
- {
- $refer = $resultSet = array();
- foreach ($list as $i => $data)
- {
- $refer[$i] = &$data[$field];
- }
- switch ($sortby)
- {
- case 'asc': // 正向排序
- asort($refer);
- break;
- case 'desc': // 逆向排序
- arsort($refer);
- break;
- case 'nat': // 自然排序
- natcasesort($refer);
- break;
- }
- foreach ($refer as $key => $val)
- {
- $resultSet[] = &$list[$key];
- }
- return $resultSet;
- }
- return false;
- }
- }
复制代码
- /**
- * 例子
- * 求:根据二维数组的id键值降序排列(也就是id越大的排在越前)?
- */
- $list = array(
- 0 => array(
- 'id' => 1,
- 'name' => '第一'
- ),
- 1 => array(
- 'id' => 3,
- 'name' => '第三'
- ),
- 2 => array(
- 'id' => 2,
- 'name' => '第二'
- ),
- 3 => array(
- 'id' => 4,
- 'name' => '第四'
- ),
- );
- //解答
- $new_list = list_sort_by($list, 'id', 'desc');
复制代码
|