PHP数组中的常用函数汇总

为了更直观的讲解各函数的作用和用法,方便大家的理解,首先,我们来定义一个数组。下面各函数的操作将以本数组为例:

$arr = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha");
函数部分

array_values($arr):用于返回数组所有的值,返回数组格式。

var_dump(array_values($arr));

array_keys:返回数组所有的键,返回数组。

var_dump(array_keys($arr));

检测数组中是否包含某个值。返回真、假
参数: 需要查询的值,数组,true(===)或 false(==)默认

var_dump(in_array("8", $arr,true));

交换数组中的键和值,返回新数组。

var_dump(array_flip($arr));

反转数组。返回新数组。
参数: ① 需要反转的数组,
② true:保留原有索引数组的下标与值的匹配(值和键,同时反转)。
false:只翻转值,键不翻转。默认。
无论truefalse,都不会影响关联数组,关联数组键、值永远是一对

var_dump(array_reverse($arr,true));

统计数组元素个数

count($arr);

统计数组中,所有值出现的次数。返回一个新数组
新数组格式: 键-->原数组的值(去重后的值)
值-->原数组对应的值出现的次数。

var_dump(array_count_values($arr));

移除数组中重复的值!

var_dump(array_unique($arr));

过滤数组中的每一个值:
① 不传回调函数: 过滤掉所有空值(0或""或null或false或"0"或[])
② 传回调函数:需要给回调函数传递一个参数,判断参数是否符合要求,如果符合,return true;否则,return false;

var_dump(array_filter($arr,function($num){
if($num>4){
return true;
}else{
return false;
}
}));

通过回调函数,对数组的每一个值,进行处理操作。(直接修改原数组,并返回bool类型的是否成功)

执行时,会给回调函数传递两个参数,分别是数组的value,key,然后可以在回调函数中,对值和键进行处理!

但是!!!牵扯到修改值的时候,必须要传递地址&!!!!!

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
var_dump(array_walk($fruits, function(&$item, $key,$num){
echo "{$key}-->{$item}<br>";
$item .= $key;
$item .= $num;
},"10"));
var_dump($fruits);

将数组的每个值,交由回调函数进行映射处理。

array_map():第一个参数,是一个回调函数。第二个参数起,是>=1个数组。

有几个数组,可以给回调函数传几个参数,表示每个数组的一个value;

可以对value进行处理,处理完以后通过return返回,那么新数组的对应的值就是你return回去的值。

【array_map与array_walk的异同】
相同点: 都能遍历数组,通过回调函数,重新处理数组的每一个值;
不同点:① walk只能传一个数组,回调函数接收这个数组的值和键;
map可以传多个数组,回调函数接收每个数组的值;
② walk直接修改原数组,而map不修改原数组,将新数组返回;
③ walk可以给回调函数传递一个其余参数,map只能传数组的值;
④ 处理方式上,walk如果需要改掉原数组的值,需在回调函数中传递地址,直接修改变量的值;
而map,是通过将新的值,用return返回,即可修改新数组的值。

$a = [1,2,3,4,5];
$b = [1,2,3,4,5]; $arr1 = array_map(function($value){
return $value2;
}, $a); $arr1 = array_map(function($value1,$value2){
return $value1+$value2;
}, $a,$b); var_dump($arr1);

sort -- 对数组排序(升序):可以传入第二个参数,控制以何排序。第二个参数传1,表示按照数字排序。 第二个参数传2,表示按照字符串排序,即ascii码排序!默认会自动检测。

rsort -- 对数组逆向排序(降序)

usort -- 使用用户自定义的比较函数对数组中的值进行排序

usort($arr1,function($a,$b){
return $a-$b;// 升序
return $b-$a;// 降序
});

>>> 下述3个函数,常用于关联数组排序。用法同上
asort -- 对数组进行排序并保持索引关系
arsort -- 对数组进行逆向排序并保持索引关系 
uasort -- 用户自定义的比较函数对数组进行排序并保持索引关联

ksort -- 对数组按照键名排序
krsort -- 对数组按照键名逆向排序
uksort -- 使用用户自定义的比较函数对数组中的键名进行排序

自然排序:数字按照0-9,字母按照a-z进行排序;
下面两个函数,都是按照自然排序,并且排序时会保留键值关联。
natsort -- 用“自然排序”算法对数组排序
natcasesort -- 用“自然排序”算法对数组不区分大小写字母排序

array_multisort -- 对多个数组或多维数组进行排序.
第一个参数:第一个数组(必选)
之后都是可选参数:SORT_DESCSORT_ASC(升序降序)、SORT_STRINGSORT_NUMBERIC(按照数字还是字符串排序)
再之后,是多个可选数组;

排序规则:先拍第一个数组,之后的数组,按照与第一个数组对应的关系,一列一列的移动!!!

如果对多个数组排序,需保持多个数组长度一致。否则会报警告;

$arr2 = [6,9,4,7,3,8];
$arr3 = [6,9,4,7,3,8]; $score = [89,12,78,45,3];
$name = ["zhangsan","lisi","wangermazi","liergou","niesanfen"]; array_multisort($score,SORT_DESC,SORT_NUMERIC,$name); var_dump($score);
var_dump($name);

array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )j截取数组 :
① 数组,必须
② 从第几位开始截取,必选。负数表示,从右边数第几位;(按照数组的默认顺序,包含关联、索引数组,而不是按照下标)
③ 截取的长度,可选。默认,截到最后;
④ Boolean类是否保持键值关联,可选。默认,索引重新排序,传true保持索引关联

$arr1 = array_slice($arr,2,5,true);
var_dump($arr1);

array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] ) 删除或替换数组中的值:
返回值: 被删掉的数组;
参数:
① 数组的地址,会修改原数组
② 从第几位开始删、替换;
③ 删除或替换的长度
④ 为空,表示删除操作;传入内容,表示替换操作的新值;

$arr = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha");

$arr1 = array_splice($arr,4,5,[0,0,0,0,0,0]);
var_dump($arr1);
var_dump($arr);

array_combine --  创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 
array_combine(作为键的数组,作为值的数组);
两个数组必须保持一致,否则报警告,返回false。

$arr1 = [1,2,3,4,5];
$arr2 = [6,7,8,9,0]; $arr3 = array_combine($arr1, $arr2);
var_dump($arr3);

合并数组
array array_merge ( array array1 [, array array2 [, array ...]] )
合并多个数组,将后面的数组拼接到前面的数组后面。
如果多个数组中,出现同名的关联键值,则后面的会覆盖前面的。

$arr1 = [1,2,3,"a"=>4,"10"=>5];
$arr2 = [6,7,8,"a"=>9,"10"=>0];
$arr3 = array_merge($arr1,$arr2);
var_dump($arr3);

数组取交集

array array_intersect ( array array1, array array2 [, array ...] )

多个数组取交集,结果会保留第一个数组的,键值关联匹配。

$arr1 = [1,2,9,"a"=>4,5];
$arr2 = [6,7,8,"a"=>9,"10"=>5];
$arr3 = array_intersect($arr1, $arr2);
var_dump($arr3);

数组取差集
array array_diff ( array array1, array array2 [, array ...] )
取出多个数组中,在第一个数组中包含,但是在其他数组中不包含的值。保留第一个数组的键值关联。

$arr1 = [1,2,9,"a"=>4,5];
$arr2 = [6,7,8,"a"=>9,"10"=>5];
$arr3 = array_diff($arr1, $arr2);
var_dump($arr3);

array_pop:删除数组最后一个值,并且返回这个值;
array_push: 数组的最后,放入1-多个值,返回处理之后数组的元素个数。

array_shift:删除数组第一个值,并且返回这个值;
array_unshift:数组开头,放入1-多个值,返回处理之后数组的元素个数。

$arr1 = [1,2,3,4,5,6,7];

echo array_pop($arr1);

echo array_push($arr1,[8,9],0);

echo array_shift($arr1);

echo array_unshift($arr1,0);

var_dump($arr1);

array_rand:随机抽取数组中的1到多个键名!!第二个参数为空,表示抽一个,传入数字表示抽n个。

$arr1 = [1,2,3,4,5,6,7];
var_dump(array_rand($arr1,3));

shuffle:随机打乱数组顺序,直接修改原数组。

$arr1 = [1,2,3,4,5,6,7];
shuffle($arr1); var_dump($arr1);

更改arr1数组:

$arr1 = array(1,2,3,4,5,6,"a"=>7,"b"=>8,"c"=>9,1,"haha","haha",3,5);
$arr2 = array();

1、有一个空数组arr2: 键-->原数组去重的值 值-->原数组每个值出现的次数
2、遍历原数组arr1:并取出arr1中的每一个值;
3、检测:新取出的这个值,是否在arr2中,有一个同名的键。
如果有: 说明找到了与现在新取值相重复的值。那么,就把arr2中的这个键对应的值+1;
如果没有:说明截至现在,还没有与新取值重复的项。那么,就在arr2中新建一个同名的键,让值为1;

foreach ($arr1 as $key1 => $value1) {
$isHas = false;
foreach ($arr2 as $key2 => $value2) {
if($key2 == $value1){
$arr2[$value1] ++;
$isHas = true;
}
}
if(!$isHas) $arr2[$value1] = 1;
} var_dump($arr2);

PHP从入门到精通(四)的更多相关文章

  1. Python基本语法[二],python入门到精通[四]

    在上一篇博客Python基本语法,python入门到精通[二]已经为大家简单介绍了一下python的基本语法,上一篇博客的基本语法只是一个预览版的,目的是让大家对python的基本语法有个大概的了解. ...

  2. MyBatis从入门到精通(四):MyBatis XML方式的基本用法之增删改

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. insert用法 1.1 简单的 ...

  3. iOS开发-UI 从入门到精通(四)

    一.UITextField 1.UITextField是什么? (1)UITextField(输入框):是控制文本输入和显示的控件.在App中UITextField出现频率也比较高: (2)iOS系统 ...

  4. Atom编辑器入门到精通(四) Atom使用进阶

    在本节中将介绍Atom提供的更高级的使用技巧,通过这些技巧将会进一步提高你的代码编写效率 代码片段(Snippets) Snippets是一种在代码中快捷插入代码块的方式,下面是维基百科中对Snipp ...

  5. Python基本语法[二],python入门到精通[四] (转)

    写在前面 python你不去认识它,可能没什么,一旦你认识了它,你就会爱上它 回到顶部 v正文开始:Python基本语法 1.定义常量: 之所以上篇博客介绍了定义变量没有一起介绍定义常量,是因为Pyt ...

  6. flutter从入门到精通四

    widget Flutter 从 React 中吸取灵感(如果有react的编程经验,会很容易理解flutter),通过现代化框架创建出精美的组件. 它的核心思想是用 widget 来构建你的 UI ...

  7. Maven从入门到精通(四)

    这一篇我会着重讲解Maven的核心命令及作用,Maven在项目构建各个阶段的作用. 1.maven生命周期模型: 1.1.清洁(clean) 1.2.默认(default) 1.3.站点(site) ...

  8. Python运算符,python入门到精通[五]

    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”.在计算器语言中运算符大致可以分为5种类型:算术运算符.连接运算符.关系运算符.赋值运 ...

  9. GPU 编程入门到精通(四)之 GPU 程序优化

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

随机推荐

  1. php处理手机号中间的四位为星号****

    在显示用户列表的场景中,一般用到手机号的显示时都需要对手机号进行处理,一般是把中间的四位换成星号****,我本人用php处理的思路是进行替换,用****替换手机号的中间四位 代码如下: $all_lo ...

  2. 17LaTeX学习系列之---LaTeX的版面设计

    目录 目录 前言 (一)基础知识 1.纸张大小的设置 2.边距的设置 3.页眉页脚的设置 4.横分割线的设置 5.行间距与段间距 (二)实例 1.源代码 2.输出效果: 目录 本系列是有关LaTeX的 ...

  3. 【软件工程1916|W(福州大学)_助教博客】团队答辩助教问题记录

    周一进行了团队项目的课堂答辩,结合团队项目报告对团队项目提出了1-2个问题,将问题和团队回答巨鹿如下 那周余嘉熊掌将得队 如何用户保证隐私安全?答:后期考虑,团队中有一个专业是信息安全的,会针对这块提 ...

  4. 报数的golang实现

    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: . . . . . 1 被读作 "one 1" ("一个一") , 即 11 ...

  5. IO流_SequenceInputStream(序列流)

    SequenceInputStream(序列流):就是将多个流合成一个有序的流 需求:将三个文件中的数据合并到一个文件中 import java.io.FileInputStream; import ...

  6. 洛谷P2057 【SHOI2007】善意的投票

    洛谷P2057 [SHOI2007]善意的投票 题目链接 这道题是最小割的一个经典应用:划分集合. 题目的意思就是就是将所有的小朋友分为两个集合:同意睡觉和不同意睡觉的.不同的集合之间的边都要断开. ...

  7. 转://Oracle补丁及opatch工具介绍

    一. CPU(Critical Patch Update) 一个CPU内包含了对多个安全漏洞的修复,并且也包括相应必需的非安全漏洞的补丁.CPU是累积型的,只要安装最新发布的CPU即可,其中包括之前发 ...

  8. mysql对String类型的数字值排序

    一.需求:根据月份分组,然后再根据月份排序 效果图 sql如下: SELECT ) number, date_format(created_at,'%c') date FROM ********* W ...

  9. 关于npm --save还是-save的横岗数量的细节的记录

    最近又开始鼓捣npm了,所以得稍微记录一下. 首先是npm install xxx --save 和 npm install xxx -save这两的区别(注意加粗的部分,横杠数不一样).当我搜索-- ...

  10. 在windows端使用jupyter notebook,服务器充当后台计算云端 简化描述

    在CentOS7服务器端启动jupyter notebook服务,在windows端使用jupyter notebook,服务器充当后台计算云端 简化描述 CentOS7服务器端 jupyter no ...