一、数组的操作

数组是一种复合数据类型,是数据的集合。

数组中的数据称为元素,每个元素是由键和值组成的键值对。

二、数组分类

1、关联数组

数据是由键和值形式构成的数组,键和值有一定关系

$arr = array(‘dbhost’=>’localhost’, ‘dbuser’=>’root’, ‘dbpwd’=>’123456);

2、下标数组,索引数组

它的键只是表示元素的位置,它和数据没有太大的关联

下标默认是从0开始的

3、一维数组

数组中元素没有数组类型的数据

4、多维数组

数组中的元素有数组类型的数据

三、数组元素的遍历方法

使用专门用于的foreach循环结构可以很方便的遍历数组元素

在遍历数组时,它是使用指针来操作数组元素。

初始时,指针指向第一个元素,下一次循环开始前,指针向前移动,指向下一个元素

如果我们在foreach遍历时,增加元素

发现foreach并没有把新增加的元素遍历到!

  1. 实际上,foreach用来遍历的数组变量是一个原数组变量的拷贝!

关于$k 和 $v这两个变量实际上是一个临时的变量

它不是数组元素,每一次遍历,都会把当前元素的键和值赋给$k和$v

它也是键或 值的一个拷贝

采用引用方式时,将真正的修改原数组元素的值

注意:引用方式的问题

应该怎么办?

在使用引用方式的情况,退出foreach后要unset($v)

四、和数组指针有关的函数

Key() 获取当前元素的键的数据

Current() 获取当前元素的值

Next() 指针向后移动一次

Prev() 指针向前移动一次

End() 指针移动到最后一个元素

Reset() 指针移动到第一个元素

指针如果出界的情况

可以通过使用reset()或end()调整回去

利用each()来遍历数组

each() = key() + current() + next()

使用each时,当前元素返回4个值,两个是键,两个是值的内容

先可以使用一个叫list()的函数配合each()

配合这张图

COW(copy on write)写时复制

我们在讲变量时,传值赋值时,两个变量先是使用同一个数据容器。

当其中一个的值发生改变时,才会发生容器的复制或者叫重新分配。

我们使用一个函数memory_get_usag()

五、数组函数

1、统计

Count() 用于统计数组中元素的个数

可以给出函数的第二个参数,就可以使用递归统计的方式来计算元素个数

Count($arr, 是否递归方式,默认时是false)

正常统计是5个元素,递归方式是8个(统计完一维,又进行子数组进行统计)

Array_sum() 用于统计数组中元素的和

Array_product() 用于计算所有数组元素的乘积

2、创建数组

Array_fill(起始下标,元素数,元素的值)

Range() 建立一个指定范围数值的数组

还可以给出步进值,不写时默认是1

Array_combine() 把两个数组的元素合成一个数组,第一个参数数组的值作为键,第二个参数数组的值作为对应的值

3、变量和数组元素相互转换

Compact() 把变量通过其变量名加入到数组中

Extract() 把数组中的元素从数组中抽取出来,用它的键作为变量名,元素的值作为值

List() 把数组中的元素值赋给变量

如果中间不需要的元素可以加一个空的逗号,不给出变量名

4、判断

In_array() 判断给出的值是否和数组中某个元素的值相等

Array_key_exists() 判断给出变量值是否与数组元素中某个元素的键的值相等

判断函数经常用于程序中对传递参数的合法性进行比对(和配置参数)判断

5、键值操作

Array_keys() 可以把一个数组中元素的键返回组成一个新的数组

Array_valuse() 把数组元素的值返回组成一个新的数组

Array_flip() 交换数组元素的键和值的位置

注意:如果值有重复的,键值交换位置后,后面的覆盖前面的,元素会变少

键是不能重复的,值可以。

Shuffle() 打乱数组元素的顺序

Array_unique() 去除数组中重复的元素

6、数组和字符串相互转换

Implode() 把数组中元素用分隔符连接成一个字符串

Explode() 把字符串使用分隔符隔开的内容保留到数组中

这两个函数是互逆的

7、模拟栈操作

数据在栈区,就有几种行为方式

先进先出,先进后出,后进先出,后进后出

Array_push() 把数据压入数组的末尾

元素下标会依次增大

Array_unshift() 把数据压入数组的头部

Array_pop() 把数组中的数据从尾部去掉一个

我们模拟了一个后进行先出

Array_shift() 把数组中的数据从头部去掉一个

8、利用回调函数处理数据

Array_map() 将回调函数作用数组的元素对元素进行处理

一个特殊的使用方法:省略回调函数名,此时如果输入参数是两个数组,则会对两个数组进行简单的合并

我们也可以在回调函数处使用系统内置好的函数,参数也可以是多个

上面就是一个比较三个数组对应元素最大值的例子

Array_walk() 对数组中的每个元素应用用户编写的函数

注意:

回调函数接收的参数,前面是值,后面是键,值可以使用引用方式

9、排序

Sort() 对数组元素进行按值的从小到大的再排序

注意:下标会重新分配

那么,键值数组排序后是什么情况?

值会按顺序重新排列,但键将丢失,改成使用下标方式

Rsort() 根据数组元素的值进行从大到小重新排列

和sort()特征一样,只是值从大到小

Ksort() 根据元素的键进行从小到大的重新排序

Krsort() 根据元素的键进行从大到小的排序

特征同上

Asort() 对数组元素进行从小到大的重新排序,并保持下标不变

Arsort() 对数组元素进行从大到小的重新排序,并保持下标不变

特征和上面一样

Natsort() 对数组元素进行自然排序

Sort()实际是按字符从左到右依次比较其ascii码值来判断大小

Usort() 使用用户自定义的比较函数对数组中的值进行排序

排序结果

要点:比较的规则

正序时,等于返回0,小返回-1,大返回1

倒序时,等于返回0,小返回1,大返回-1

10、拆分合并

Array_slice() 从数组中取出一段

注意:数组元素下标是从0开始的,因此第二个参数代表元素位置

Array_chunk() 把数组分成多个小的数组

第二个参数用于表明分割后的子数组有几个元素

此函数还有第三个参数,用于表明是否分割后带着键,默认为false,不带键

Array_merge() 用于合并多个数组为一个大数组

注意:此函数可以接收多个数组类型的参数,如果有重复的数据,用第一个数组的元素

我们讲运算符,有一个数组运算符+,行为是不是和这个是一样的。

Array_rand() 随机给出数组元素

注意:结果给出的不是值!而是键!!!

增加第二个参数,会设置随机几个数据出来。默认是1个。

Array_intersect() 取多个数组的交集

Array_diff() 取两个数组元素中不同的数据

注意:如果不相同的元素具有相同的键,则值用左边数组的

我是小咖:决胜心法:上面的内容都可以在php官方手册上查到,学会用手册就是入门心法。

发个邀请:
如果你正好想学习php,可以与我一起交流,我的VX:feilueze333。下面资料免费赠送

https://u.wechat.com/MBmL_JPV6ztIaLPi1_0CTtY<br>https://u.wechat.com/MA_oIfKokwXDpj3Wwfkv40U (二维码自动识别)

c++随机打乱数组_编程之路之php数组操作详解【文末有惊喜】相关推荐

  1. smart gesture安装失败_从安装到打印HP 108w操作详解

    行政是一个"有TA不显,没TA不行"的岗位,工作内容涉及广泛,每学习一项新技能,对行政人员来说都是一次"装备升级"的机会. 在办公室中常常会用到打印机,而每当有 ...

  2. C++框架_之Qt的信号和槽的详解

    目录 C++_之Qt的信号和槽的详解 1.概述 1.1对象树(子对象动态分配空间不需要释放) 2.信号和槽 Qt5 的书写方式:(推荐的使用)★★★★★ Qt4 的书写方式: 3.自定义信号槽 3.1 ...

  3. python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  4. python加密字符串小写字母循环后错两位_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  5. 如何利用一维数组实现二维数组的多列自由升降序排序过程详解

    如何利用一维数组实现二维数组的多列自由升降序排序过程详解 本例只说明多列排序的实现方式,一维数组的排序已经有过讲解不在赘述.所以本文是在已经完成了一维数组排序的函数封装的基础上完善多列排序的过程的详解 ...

  6. 网络编程中的SO_REUSEADDR和SO_REUSEPORT参数详解

    1.SO_REUSEADDR: 在BSD中,SO_REUSEADDR选项有两个用户: 如果有socket绑定了0.0.0.0:port:设置该参数后,其他socket可以绑定本机ip:port.(该功 ...

  7. 计算机编程种常见的几种编码详解

    计算机编程种常见的几种编码详解 其实计算机编程离不开编码 但是大多数都不能真正全面了解各种编码 今天就来好好和几位编码熟悉熟悉 一.字符.字符集和字符编码方式 字符:字符是抽象的最小文本单位.它没有固 ...

  8. 计算机主板一直滴滴响,主板报警声大全_主板一直滴滴滴短响含义详解

    主板报警声大全_主板一直滴滴滴短响含义详解 在电脑使用过程中,有时我们会听到电脑主板发出类似报警的声音,这时候说明可能电脑主板出现了一定的问题,电脑主板报警的原因有很多,我们可以从报警的声音去区分到底 ...

  9. new 数组_编程-遍历数组元素N次/填充数组至指定长度

    需求如下: 有数组 names=["a","b","c"] 需要遍历数组元素n次,比如: n=2时,期待的输出为:a,b n=5时,期待的输 ...

最新文章

  1. 虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
  2. Python day7之mysql
  3. 黄聪:Discuz X2.0 SEO:论坛面包屑导航伪静态 去掉面包屑导航forum.php(转)
  4. Elasticsearch--入门-_cat命令查看节点相关信息---全文检索引擎ElasticSearch工作笔记004
  5. linux ifcfg-33 没有eth0解决方法
  6. maven添加mirror_Maven配置setting.xml值Mirror与Repository区别(示例代码)
  7. Linux上解压缩.gz、.bz2、.tar、.tar.gz、tar.xz后缀文件
  8. 移远M26 GSM实时获取网络时间
  9. 设计师都在用这几个免费素材网站,赶紧马住
  10. 微纳加工技术_工艺模块_STI 浅槽隔离
  11. 计算机管理为什么不能扩展卷,Win10 C盘不能扩展卷怎么解决?
  12. 【实验】阿里云大数据助理工程师认证(ACA)- ACA认证配套实验-03-MaxCompute内置函数
  13. 移动硬盘文件丢失如何找回丨500G硬盘
  14. 萨提亚亲密关系(摘抄)
  15. 读书笔记-赢在用户[1]:什么是人物角色?为什么要创建人物角色?
  16. MinIO纠错码、分布式MinIO集群搭建及启动
  17. excel如何进行两张表的自动关联?---vlookup
  18. PAT练习 小白鼠排队
  19. pytorch训练神经网络loss刚开始下降后来停止下降的原因
  20. 可重复读解决了什么问题?

热门文章

  1. python中文字符串排序问题_Python字符串排序
  2. fastnest怎么一键排版_FastNEST数控编程组合排版与技巧探讨
  3. C++ 杂七杂八的东西
  4. 编程常用英语词汇 | GitHub
  5. OpenGL学习笔记:画点、直线和多边形(第一讲)
  6. python爬虫基本原理_Python爬虫【一】爬虫的基本原理
  7. python的web技术宅
  8. 总结Android开发中必备的代码Review清单
  9. JS中的六大数据类型 (笔记0)
  10. 可以分屏的软件_Screen分屏软件下载|Screen+专业分屏 免费版v1.4.25 下载