如何对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);
输出结果为: