PHP排序算法:二维数组排序

二维数组排序,比如一个学生成绩数组:


$arr[] = array(‘name‘=>‘a‘,‘score‘=>9);
$arr[] = array(‘name‘=>‘c‘,‘score‘=>4);
$arr[] = array(‘name‘=>‘d‘,‘score‘=>1);
$arr[] = array(‘name‘=>‘b‘,‘score‘=>3);
$arr[] = array(‘name‘=>‘f‘,‘score‘=>2);
$arr[] = array(‘name‘=>‘e‘,‘score‘=>7);
$arr[] = array(‘name‘=>‘h‘,‘score‘=>6);
$arr[] = array(‘name‘=>‘g‘,‘score‘=>8);

使用选择排序法,代码如下:

$n = count($arr);
for($i=0;$i<$n;$i++){
    $min = $arr[$i][‘score‘];
    //比较[i,n)中的最小数,然后进行位置兑换
    for($j=$i+1;$j<$n;$j++){
        if($arr[$j][‘score‘] < $min){
            $temp    = $arr[$j];
            $arr[$j] = $arr[$i];
            $arr[$i] = $temp;
            $min = $temp[‘score‘];
        }
    }
}

如果使用PHP自带函数:


// 准备要排序的数组
foreach ($arr as $k => $v) {
    $score[] = $v[‘score‘];
}
array_multisort($score, SORT_DESC, $arr);
print_r($arr);

每三种方法:
拆分临时数组,排序后再组装

$temp = array();
$result = array();
foreach($arr as $key => $v)
{
    $temp[$key] = $v[‘score‘];
}
//先 生成过渡数组,并对数组的键值进行排序
asort($temp); //倒序使用arsort
foreach ($temp as $key => $value)
{
    $result[$key] = $arr[$key];
}
print_r($result);
unset($v);
unset($value);

原文地址:http://blog.51cto.com/13833231/2133447

时间: 2024-10-09 21:23:08

PHP排序算法:二维数组排序的相关文章

写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

下面代码没有认真看: <?php //二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order = 0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach ($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if ($

PHP 二维数组排序 可以按指定 键值排序

<?php header("Content-Type:utf-8"); $arr = array( 0 => array( 'name' => '国际原油价格', 'url_pinyin' => 'kucun', ), 1 => array( 'name' => '原油', 'url_pinyin' => 'jiage', ), 2 => array( 'name' => '原油价格', 'url_pinyin' => 'yu

php基础篇-二维数组排序姐妹篇

前面介绍了php多维数组排序的一个函数array_multisort() ,想了解的人可以点击 二维数组排序 array_multisort 下面介绍下不适用array_multisort()进行多维数组的排序. 这里介绍下2个php排序函数,一个是asort,一个是arsort. asort(array,sorttype) 函数对数组进行排序并保持索引关系.主要用于对那些单元顺序很重要的结合数组进行排序. 可选的第二个参数包含了附加的排序标识. SORT_REGULAR - 默认.以它们原来的

PHP 二维数组排序保持键名不变

对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例: <?php $data = array( 1001 => array( 'age' => 22, 'name' => '鸠摩智' ), 1007 => array( 'age' => 21, 'name' => '慕容复' ), 1004 => array( 'age' => 27, 'nam

Graham算法—二维点集VC++实现

一.凸包定义 通俗的说就是:一组平面上的点,求一个包含所有点的最小凸多边形,这个最小凸多边形就是凸包. 二.Graham算法思想 概要:Graham算法的主要思想就是,最终形成的凸包,即包围所有点的凸多边形,假定多边形是按逆时针方向生成的,那么多边形内部包围的所有点与多边形每个有向边的关系都是:点在有向边的左边.依照此思想,只要找到一个出发点,然后依此出发点按逆时针方向构建多边形,并保证每加入一条有向边时,都要满足其余点都在该边的左边. ***点与线的关系定义:平面上的三点P1(x1,y1),P

js sort 二维数组排序的用法小结

最近在搞js 排序的问题,因为数据库排序太耗资源,如果能转移到客户端去排序,能大大D减少服务器内存消耗.客户端的话,除了js,就是as了,可惜我as学得太烂,所以只能选择js来研究研究了...经过我的测试,js内置方法sort的效率非常高 我们知道在js中默认提供了sort函数,但是这个函数默认是按照数组内容的ascii码升序进行排列的,如果我们要对二维数组排序要如何做呢?在php中是有multi_sort函数可供调用的,但是在js中似乎没有这种函数,但是没关系 ,因为js的sort函数其实也提

PHP_I love U之(1)php衣食父母:使用usort()函数为二维数组排序

<?php //PHP_I love U之(1)php衣食父母:使用usort()函数为二维数组排序 //PHP语言中使用usort()函数 为 二维数组排序: // [][]==  a[][1]= 长度; a[][2] = views点击数 $AAlong=10; //变量$AAlong 定义数组长度 //for ($i=0;$i<$AAlong;++$i)  //多维数组扩展时使用- //{ for($j=0;$j<$AAlong;++$j) //for j22  //这段给数组(用

php基础篇-二维数组排序 array_multisort

原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数. array1 必需.规定输入的数组. sorting order 可选.规定排列顺序.可能的值是 SORT_ASC 和 SORT_DESC. sorting t

JS:二维数组排序和获取子级元素

JS:二维数组排序和获取子级元素 1. 二维数组排序 1.按数值排序 1 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; 如果我们要按每个子数组的第一列来排序要如何做呢,我们可以定义一个比较函数: 1 arr.sort(function(x, y){ 2 return x[0] – y[0]; 3 }); 这里的比较函数的作用是什么呢?其实是数组依次将数组元素复制给x,y,比如首先将arr[0]赋给x,arr[1]赋给y,然后用x[0] – y[0],根