如何对PHP数组进行排序?

第一种方法:sort()

asort()函数是对数组进行排序并保持索引关系

注意:sort大多是用来排序数字索引数组的,如果把一个关联数组放到sort里排序,那么数组的键会丢失。另外UTF8中文无法排序。

下面是sort函数的小例子,具体代码如下:

从 A-Z, a-z, 数字从小到大  进行排序

<?php
$arr = ['g','h','d','a','z','F','b','c','e','A','f'];
print_r($arr);
sort($arr);
print_r($arr);

如果值是数字使用sort函数

<?php
$arr = [8,1,2,10,3,4,5];
print_r($arr);
sort($arr);
print_r($arr);

如果数组的值是数字,使用 sort()函数,就会从小到大,进行排序!

第二种方法是对关联数组升序:asort()和ksort()

既然关联数组不能使用sort来排序,那么应该使用什么函数呢?我们推荐使用asort,用法与sort一样,不过排序之后,键仍然能保留

<?php
$arr['one'] = 33;
$arr['two'] = 100;
$arr['three'] = 3;
print_r($arr);
asort($arr);
print_r($arr);

输出结果为

关联数组是由键和值组成的,那么asort到底是以什么为依据排序的?

我们可以证明asort实际上是使用数组的值进行排序的,那么如果想对键进行排序,我们可以使用ksort。

ksort()函数是对数组按照键名排序。

<?php
$arr['one'] = 33;
$arr['two'] = 100;
$arr['three'] = 3;
print_r($arr);
ksort($arr);
print_r($arr);

PHP数组如何合并?

array_merge():它是将一个数组单元或者多个数组单元进行合并起来,一个数组中的值,赋加在前面一个的数组后面,返回作为结果的数组。

1.假设输入的数组中的字符串键名有相同的,那么该键的键值就是最后一个键名相对应的值,这里大家要注意一点,后面的值会覆盖前相同的值!具体代码如下:

<?php
$arr1 = ["name1"=>"a","name2"=>"b","name3"=>"c"];
$arr2 = ["name5"=>"d","name2"=>"e"];
$newarr = array_merge($arr1,$arr2);
print_r($newarr);

输出结果为:

2.如果一个数组是数字键名的话,那么键名会是以连续的方式重新索引,那么后面的值就不会覆盖原来的值,而是附加到后面。具体代码如下:

<?php
$arr1 = [1=>"a",2=>"b",3=>"c"];
$arr2 = [2=>"d",3=>"e"];
$newarr = array_merge($arr1,$arr2);
print_r($newarr);

输出结果为:

PHP数组的截取,等分以及替换部分数组

什么是截取数组?(array_slice)

array_slice从数组中取出一段元素,第一个参数是原数组,第二个参数是开始下标(牢记数组是从0开始的),第三个参数是从下标开始取出的元素个数,如果不设置,默认一直取到数组末尾!

<?php
$arr = [1,2,3,4,5,6];
$newarr = array_slice($arr,1,2);
print_r($newarr);

从下标1开始截取,取2个元素,赋给新的变量

输出的结果为:

array_slice()的第三个参数不写

<?php
$arr = [1,2,3,4,5,6];
$newarr = array_slice($arr,1);
print_r($newarr);

输出的结果为:

当array_slice()的第三个参数不写,那么就会默认截取到数组的最后一个元素!array_slice()函数的第二参数就是指定从哪个下标开始截取!

array_slice仅仅是将数组中的一段取出重新赋值给别的数组,而原数组是不受影响的

什么是替换部分数组?(array_splice)

array_splice() 函数与 array_slice() 函数类似,选择数组中的一系列元素,但不返回,而是删除它们并用其它值代替,换句话说就是去掉数组中的某一部分并用其它值取代。

注意:

1.如果 replacement 不是数组,会被 类型转换 成数组 (例如: (array) $replacement)。 当传入的 replacement 是个对象或者 NULL,会导致未知的行为出现。

2.注意 input 中的数字键名不被保留。

<?php
$arr = [1,2,3,4,5,6];
array_splice($arr,1,2,array(11,22,33));
print_r($arr);

上面的示例中,我们是将替换后将其赋给一个新的数组,那么如果没有新的数组呢?我们看下面的实例:

<?php
$arr = [1,2,3,4,5,6];
array_splice($arr,1,2);
print_r($arr);

输出的结果为:

从输出的结果中就可以看出,如果没有新的数组,那么就相当于 array_slice,切掉相关位置的数组!

array_splice和array_slice两个函数的相同点和不同点

相同点:

可以实现对数组,进行指定下标位置,和指定元素个数进行数组切割

(其实,就是删除指定的数组元素)

不同点:

array_slice 是传值函数, 原数组不会变化,切割后,可以赋给一个新数组!

array_splice是传址函数,会直接修改原数组,可以设置新的元素,去替换被切割掉的数组元素!

什么是等分数组?(array_chunk)

array_chunk()函数是将数组中的元素数量等分的切割成一个二维数组,其中每个数组的单元数目由第二个参数 size 决定。数组的最后一个单元数目可能会少于 size 个,下面我们一起看下语法格式:

<?php
$arr = [1,2,3,4,5,6,7,8,9,10];
$newarr = array_chunk($arr,3);
print_r($newarr);

输出结果为:

PHP数组随机乱序和反序的实例详解

一. 什么是随机乱序?(shuffle)

shuffle 就是 打乱数组。

本函数打乱(随机排列单元的顺序)一个数组。 它使用的是伪随机数产生器,并不适合密码学的场合。

shuffle实例用法:

下面我们举例来详解shuffle函数,具体代码如下:

<?php
$arr = [1,2,3,4,5,6,7,8,9,10];
shuffle($arr);
print_r($arr);

输出结果为:

说明:关联数组被shuffle后,键会丢失,从上面的实例中大家应该也能看的出来!

二. 什么是反序?(array_reverse)

array_reverse — 返回单元顺序相反的数组,反序是将一个原始的数组中的每个元素的顺序翻转

array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组,如果preserve_keys 为 TRUE 则保留原来的键名。

<?php
$arr = ["1"=>"a","2"=>"b","3"=>"c"
];
$newarr = array_reverse($arr);
print_r($newarr);

输出结果为:

键是数字时,反序后默认键会重置为0、1、2……

键是数字时保留键值示例代码:

<?php
$arr = ["1"=>"a","2"=>"b","3"=>"c"
];
$newarr = array_reverse($arr,true);
print_r($newarr);

注意:使用array_reverse函数时原数组不受影响, 会return一个新数组!

PHP数组的倒序排列

rsort() 函数对数组的元素按照键值进行逆向排序。与 arsort() 的功能基本相同。

<?php
$arr = ["1"=>"100","2"=>"300","3"=>"200"
];
rsort($arr);
print_r($arr);

输出的结果为:

说明:该函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。

arsort()函数对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。

<?php
$arr = ["1"=>"100","2"=>"300","3"=>"200"
];
arsort($arr);
print_r($arr);

输出的结果为:

说明:arsort函数和rsort函数的区别就是在于arsort()函数对关联数组按照键值进行降序排序,而rsort函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。

krsort — 对数组按照键名逆向排序

krsort对数组按照键名逆向排序,保留键名到数据的关联。主要用于结合数组。

<?php
$arr = ["name1"=>"100","name2"=>"300","name3"=>"200"
];
krsort($arr);
print_r($arr);

输出结果为:

PHP数组的排序详解相关推荐

  1. 旋转排序数组系列题详解

    旋转排序数组系列题详解 文章目录 旋转排序数组系列题详解 一.问题描述:旋转数组的最小数字 二.分析:二分查找 三.代码 四.问题描述:寻找旋转排序数组中的最小值 五.分析:二分搜索 六.代码 七.问 ...

  2. shell编程数组与冒泡算法排序详解

    shell编程数组与冒泡算法排序详解 一 数组的四种表达方式 二 数组的增删改查操作 三 数组传参 3.1 主程序向函数传数组参数 3.2 从函数返回数组到主程序 四 冒泡算法排序 一 数组的四种表达 ...

  3. 秒懂的shell编程数组与冒泡算法排序详解

    shell编程数组与冒泡算法排序详解 一.数组的四种表达方式 二 .数组的增删改查操作 三 .数组传参 3.1 主程序向函数传数组参数 3.2 从函数返回数组到主程序 四 .冒泡算法排序 一.数组的四 ...

  4. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

  5. 八大排序 详解(下)——指向函数的指针 的使用

    <八大排序 详解(上)> <八大排序 详解(中)> 紧接前两篇博文,我们这篇博文所要讲解的是我们前两篇博文编写的所有函数的使用.生成随机数组的函数的讲解以及一种及其凶悍的调用方 ...

  6. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...

  7. Sorting 排序详解(c语言实现)

    Sorting 排序详解(c语言实现)# 今日突然有任务,明天补充完整. 邮箱:Is_Dmy@163.com期待交流. Hello,各位小伙伴~我是你们的课代表橙橙,今天呢我要给大家分享的是关于内排序 ...

  8. java生成字符串数组_Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...

  9. 十大排序详解(java实现)

    十大排序详解(java实现) 一.十大排序算法概述 1.定义 2.分类 3.比较 4.相关概念 二.各算法原理及实现 1.冒泡排序 2.简单选择排序(Selection Sort) 3.直接插入排序( ...

最新文章

  1. IDC:以太网交换机市场增长2%
  2. 剑指Offer(Java实现)把字符串转换成整数
  3. ACE - Reactor模式源码剖析及具体实现(大量源码慎入)
  4. easyui树拖拽排序java_项目中集成Easyui-Tree,可拖拽更新节点
  5. asp.net页面中hmtl注释的问题
  6. 正则表达式 使用分支
  7. 英特尔一口气发布了三款处理器、两款存储、一款以太网适配器
  8. 抖音短视频数据分析报告工具
  9. 大学生创新创业训练计划项目(信息类)申报书撰写
  10. linux升级libpng,在Linux中安装libpng-dev以解决pngquant构建失败的问题
  11. SVN检出项目到本地
  12. 基于 mini2440 电阻式触摸屏(二):S3C2440 电阻式触摸屏接口、内部ADC结构
  13. Springboot使用POI读写excel(详细)
  14. Android自定义星星评分控件
  15. 【U8】U8V12.5新增部门档案,保存提示:系统忙,稍后再试!
  16. 计算机翻译图片,扫描图片翻译在线翻译方法(纯干货~)
  17. Android系统直接输出Excel文档
  18. 【爬虫】 Squid 3.5.20 安装与配置 高匿代理
  19. 09组团队项目-Beta冲刺-1/5
  20. r语言中,如何将分类变量化为虚拟变量

热门文章

  1. mysql version 乐观锁_mysql乐观锁总结和实践
  2. 统信UOS编译chromium过程
  3. 使用JCplayer在自己的网站上播放视频
  4. 路由器、交换机及防火墙漏洞分析及应对措施
  5. 视频交流网站技术的研究、发展以及趋势
  6. IA64Linux内核,关于amd64和ia64的理解
  7. 学习数据分析:缺失值处理的正确姿势!
  8. Spring Security的配置机制早就变了
  9. 【干货】量化投资国内外很棒的论坛网站
  10. ViSP学习笔记(四):在Gazebo环境下实现Pionner3dx移动机器人基于四个特征点的视觉伺服仿真