PHP数组排序函数合集 以及它们之间的联系分析

下边提到的几个数组函数的排序有一些共性:
1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型。
2 函数名中出现单a表示association,含义为,在按值排序的过程中,保持key=>value的对应关系不变
3 函数名中出现单k表示key,含义为,在按值排序的过程中按照数组key而不是数组的值排序
4 函数名中出现单r的表示reverse,含义为,按照跟不加r的相反的顺序排列
5 函数名中出现单u的表示user-defined,含义为,使用用户自定义函数排序,如果函数的逻辑是参数1<参数2返回负数,则按照升序排列(p1小2返负升)。
--------------------sort函数升序排序--------------------------------


代码如下:

bool sort ( array &$array [, int $sort_flags= SORT_REGULAR ] )
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
var_dump($fruits);
?>
结果:
array
0 =>
string
 'apple' (length=5)
  1 =>
string
 'banana' (length=6)
  2 =>
string
 'lemon' (length=5)
  3 =>
string
 'orange' (length=6)

--------------------rsort降序排列--------------------


代码如下:

<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
var_dump($fruits);
?>
结果:
array
  0 =>
string
 'orange' (length=6)
  1 =>
string
 'lemon' (length=5)
  2 =>
string
 'banana' (length=6)
  3 =>
string
 'apple' (length=5)

---------------asort按照二维数组值的升序排列(保持key=>value的关联关系)-----------


代码如下:

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
var_dump($fruits);
?>
结果:
array
  'c' =>
string
 'apple' (length=5)
  'b' =>
string
 'banana' (length=6)
  'd' =>
string
 'lemon' (length=5)
  'a' =>
string
 'orange' (length=6)

---------arsort按照二维数组值的降序排列(保持key=>value的关联关系)---------


代码如下:

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
var_dump($fruits);
?>
结果
array
  'a' =>
string
 'orange' (length=6)
  'd' =>
string
 'lemon' (length=5)
  'b' =>
string
 'banana' (length=6)
  'c' =>
string
 'apple' (length=5)

--------------------ksort按照数组的key升序排列--------------


代码如下:

<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
var_dump($fruits);
?>
结果
array
'a' =>
string
 'orange' (length=6)
  'b' =>
string
 'banana' (length=6)
  'c' =>
string
 'apple' (length=5)
  'd' =>
string
 'lemon' (length=5)

---------------------krsort按照数组key的降序排列-----------------------


代码如下:

<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
var_dump($fruits);
?>
array
  'd' =>
string
 'lemon' (length=5)
  'c' =>
string
 'apple' (length=5)
  'b' =>
string
 'banana' (length=6)
  'a' =>
string
 'orange' (length=6)

----------------usort函数按照用户自定义的函数排序----------------


代码如下:

<?php
function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
var_dump($a);
?>

结果:
array
  0 =>
int
 1
  1 =>
int
 2
  2 =>
int
 3
  3 =>
int
 5
  4 =>
int
 6
-----------------uksort使用自定义函数按照数组的key排序-----------------


代码如下:

<?php
function cmp($a, $b)
{
    $a = preg_replace('@^(a|an|the) @', '', $a);
    $b = preg_replace('@^(a|an|the) @', '', $b);
    return strcasecmp($a, $b);
}
$a = array("John" => 1, "the Earth" => 2, "an apple" => 3, "a banana" => 4);
uksort($a, "cmp");
var_dump($a);
?>

结果:
array
  'an apple' =>
int
 3
  'a banana' =>
int
 4
  'the Earth' =>
int
 2
  'John' =>
int
 1
--------------uasort将数组用自定义函数按照value排序,保持索引关系不变---------


代码如下:

<?php
// Comparison function
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
// Array to be sorted
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
var_dump($array);
// Sort and print the resulting array
uasort($array, 'cmp');
var_dump($array);
?>

结果:
array
  'a' =>
int
 4
  'b' =>
int
 8
  'c' =>
int
 -1
  'd' =>
int
 -9
  'e' =>
int
 2
  'f' =>
int
 5
  'g' =>
int
 3
  'h' =>
int
 -4
array
  'd' =>
int
 -9
  'h' =>
int
 -4
  'c' =>
int
 -1
  'e' =>
int
 2
  'g' =>
int
 3
  'a' =>
int
 4
  'f' =>
int
 5
  'b' =>
int
 8
-------------------array_multisort排序多个数组或多维数组---------


代码如下:

<?php
$ar = array(
       array("10", 11, 100, 100, "a"),
       array(   1,  2, "2",   3,   1)
      );

array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>

结果:
array
  0 =>
    array
      0 =>
string
 '10' (length=2)
      1 =>
int
 100
      2 =>
int
 100
      3 =>
int
 11
      4 =>
string
 'a' (length=1)
  1 =>
    array
      0 =>
int
 1
      1 =>
int
 3
      2 =>
string
 '2' (length=1)
      3 =>
int
 2
      4 =>
int
1
//说明:
1 上例中:$ar数组优先按照$ar[0]的字符串值升序排列,如果字符串值相等,再按照$ar[1]数组的数字值降序排列。
2 array_multisort函数的任意一个位置的参数如果是数组,表示排序时用的值,
如果有多个数组参数,优先按照前边的数组值进行排序,如果是常量,例如
SORT_ASC, SORT_DESC, SORT_REGULAR,SORT_NUMERIC, SORT_STRING.
表示排序方法(数组取值前优先)。
==========================================================================================
PHP二维数组排序函数
PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义。
以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:


代码如下:

function array_sort($arr,$keys,$type='asc'){
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
foreach ($keysvalue as $k=>$v){
$new_array[$k] = $arr[$k];
}
return $new_array;
}

它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:


代码如下:

$array = array(
array('name'=>'手机','brand'=>'诺基亚','price'=>1050),
array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300),
array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100),
array('name'=>'跑步机','brand'=>'三和松石','price'=>4900),
array('name'=>'手表','brand'=>'卡西欧','price'=>960),
array('name'=>'液晶电视','brand'=>'索尼','price'=>6299),
array('name'=>'激光打印机','brand'=>'惠普','price'=>1200)
);
$ShoppingList = array_sort($array,'price');
print_r($ShoppingList);

上面是对$array这个二维数组按照'price'从低到高的排序。
输出结果:(略)。

(0)

相关推荐

  • php中有关合并某一字段键值相同的数组合并的改进

    下面是实现代码: /** **关于参数的说明 **$key键值相同的键名 **$array代表原数组 **$start代表$array[0][$key] **$newkey代表相同键值相同的键名 **/ function combine_same_val($array,$start,$key,$newkey){ static $new; foreach($array as $k=>$v){ if($v[$key]==$start){ $new[$v[$newkey]][] = $v; unset

  • php计算数组相同值出现次数的代码(array_count_values)

    php计算数组相同值出现次数,可以使用php自带函数array_count_values : 说明 array array_count_values ( array $input )array_count_values() 返回一个数组,该数组用 input 数组中的值作为键名,该值在 input 数组中出现的次数作为值. array_count_values() 例子 复制代码 代码如下: <?php $array = array(1, "hello", 1, "wo

  • php数组函数序列之array_sum() - 计算数组元素值之和

    array_sum()定义和用法 array_sum() 函数返回数组中所有值的总和. 如果所有值都是整数,则返回一个整数值.如果其中有一个或多个值是浮点数,则返回浮点数. PHP 4.2.1 之前的版本修改了传入的数组本身,将其中的字符串值转换成数值(大多数情况下都转换成了零,根据具体制而定). 语法 array_sum(array) 参数 描述 array 必需.规定输入的数组. 例子1 复制代码 代码如下: <?php $a=array(0=>"5",1=>&q

  • php计算数组不为空元素个数的方法

    复制代码 代码如下: <?php $arr = array( 1=>"11", 2=>"22", 3=>"33", 4=>"" ); print_r(count(array_filter($arr))); ?>

  • PHP将二维数组某一个字段相同的数组合并起来的方法

    本文实例讲述了PHP将二维数组某一个字段相同的数组合并起来的方法.分享给大家供大家参考,具体如下: 例子: array(3) { [0]=> array(16) { ["id"]=> string(2) "42" ["uid"]=> string(2) "14" ["euid"]=> string(2) "56" ["did"]=> st

  • php计算多维数组中所有值总和的方法

    本文实例讲述了php计算多维数组中所有值总和的方法.分享给大家供大家参考.具体实现方法如下: php 内置函数 array_sum() 函数返回数组中所有值的总和,只能返回一维数组的总和: 计算多维数组所有值的和就要自定义函数了: function get_sum($array) { $num = 0; foreach($array as $k => $v) { if(is_array($v)) { $num += get_sum($v); } } return $num + array_sum

  • php合并数组中相同元素的方法

    本文实例讲述了php合并数组中相同元素的方法.分享给大家供大家参考.具体如下: 关于重复数组的删除我们都介绍过N种方法了,今天这个例子有点不同就是 删除数组中相同的元素,只保留一个相同元素,具体实例代码如下: 复制代码 代码如下: <?php // 删除数组中相同元素,只保留一个相同元素 function formatArray($array) { sort($array); $tem = ""; $temarray = array(); $j = 0; for($i=0;$i&

  • PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)

    本文实例讲述了PHP计算数组中值的和与乘积的方法.分享给大家供大家参考,具体如下: 一.概述: array_sum() 函数用于计算数组中所有值的和. array_product() 函数用于计算数组中所有值的乘积. 二.使用示例: array_sum() PHP array_sum() 函数用于计算数组中所有值的和,以整数或浮点数返回计算结果,非数字的单元将视作 0 . 语法: number array_sum( array array ) 例子: <?php $arr_a = array(1

  • php二维数组合并及去重复的方法

    本文实例讲述了php二维数组合并及去重复的方法.分享给大家供大家参考.具体实现方法如下: $arr = array_merge($labels,$label); //合并需要合并的俩个数组 $key = id;//去重条件 $tmp_arr = array();//声明数组 foreach($arr as $k => $v) { if(in_array($v[$key], $tmp_arr)) //搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true { unset($arr

  • PHP数组排序函数合集 以及它们之间的联系分析

    下边提到的几个数组函数的排序有一些共性:1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型.2 函数名中出现单a表示association,含义为,在按值排序的过程中,保持key=>value的对应关系不变3 函数名中出现单k表示key,含义为,在按值排序的过程中按照数组key而不是数组的值排序4 函数名中出现单r的表示reverse,含义为,按照跟不加r的相反的顺序排列5 函数名中出现单u的表示user-defined,含义为,使用用户自定义函数排序,如果

  • 基于PHP中自带的字符串操作函数合集

    1.查找字符位置函数: strpos($str,search,[int])://查找search在$str中的第一次位置从int开始: strrpos($str,search,[int])://查找search在$str中的最后一次出现的位置从int开始 2.提取子字符函数(双字节) submit($str,int start[,int length])://从$str中strat位置开始提取[length长度的字符串]. strstr($str1,$str2)://从$str1(第一个的位置)

  • Python字符串和其常用函数合集

    目录 1.字符串定义 2.首字母大写 3.所有字母大写 4.所有字母小写 5.大小写颠倒 6.填充0至指定长度 7.统计字符串中某个成员的个数 8.字符串是否以某个成员开头或结尾 9.查找子串在主串中第一次出现的位置 10.字符串过滤 11.字符串替换 12.字符串的is函数 13.字符串切片 1.字符串定义 # coding:utf-8 if __name__ == '__main__':     '''      通过单引号定义      通过三个单引号定义      通过三个双引号定义  

  • PHP文件大小格式化函数合集

    比如碰到一个很大的文件有49957289167B,大家一看这么一长串的数字后面单位是字节B,还是不知道这个文件的大小是一个什么概念,我们把它转换成GB为单位,就是46.53GB.用下面这些函数就可以完成这个工作: 复制代码 代码如下: //转换单位function setupSize($fileSize) {    $size = sprintf("%u", $fileSize);    if($size == 0) {         return("0 Bytes&quo

  • 详解R语言plot函数参数合集

    最近用R语言画图,plot 函数是用的最多的函数,而他的参数非常繁多,由此总结一下,以供后续方便查阅. plot(x, y = NULL, type = "p", xlim = NULL, ylim = NULL, log = "", main = NULL, sub = NULL, xlab = NULL, ylab = NULL, ann = par("ann"), axes = TRUE, frame.plot = axes, panel.

  • 2022最新前端常见react面试题合集

    目录 react性能优化方案 什么是 React Context? 何为 JSX props 是什么 应该在 React 组件的何处发起 Ajax 请求 react 强制刷新 使用 React Hooks 好处是啥? Redux内部原理 内部怎么实现dispstch一个函数的 何为纯函数(pure function) 如何配置 React-Router 实现路由切换 在 React 中,何为 state react16版本的reconciliation阶段和commit阶段是什么 类组件和函数组

  • Vim命令合集

    命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 文件命令 打开单个文件 vim file 同时打开多个文件 vim file1 file2 file3 ... 在vim窗口中打开一个新文件 :open file 在新窗口中打开文件 :split file 切换到下一个文件 :bn 切换到上一个文件 :bp 查看当

  • Python实现四个经典小游戏合集

    目录  一.效果展示 1.俄罗斯方块 2.扫雷 3.五子棋 4.贪吃蛇 二.代码展示 1.俄罗斯方块 2.扫雷 3.五子棋 4.贪吃蛇  一.效果展示 1.俄罗斯方块 这个应该是玩起来最最简单的了- 2.扫雷 运气好,点了四下都没踩雷哈哈- 3.五子棋 我是菜鸡,玩不赢电脑人- 4.贪吃蛇 害,这个是最惊心动魄的,为了我的小心脏,不玩了不玩了- 女朋友:你就是借机在玩游戏,逮到了 啊这- 那我不吹牛逼了,我们来敲代码吧~ 二.代码展示 1.俄罗斯方块 方块部分 这部分代码单独保存py文件,这里我

  • 详解Matlab中自带的Java操作合集

    目录 1 获取鼠标在全屏位置 2 获取当前剪切板内容 3 内容复制到剪切板 4 获取鼠标处像素颜色 5 获取屏幕截图 6 创建java窗口(并使其永远在最上方) 7 透明窗口 1 获取鼠标在全屏位置 屏幕左上角为坐标原点,获取鼠标位置和获取鼠标像素颜色建议和while循环或者timer函数结合使用: import java.awt.MouseInfo; mousepoint=MouseInfo.getPointerInfo().getLocation(); mousepoint=[mousepo

  • Java8 Stream 流常用方法合集

    目录 一.概述 二.分类 三.具体用法 1. 流的常用创建方法 2. 流的中间操作 3. 流的终止操作 一.概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询.也可以使用 Stream API 来并行执行操作. 简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式. 特点: 不是数据结构,不会保存数据.

随机推荐