php数组的创建和使用,数组常用函数

  • 数组的概念
  • 一维数组的创建和使用
    • 1.直接将变量声明为数组元素
    • 2.通过array()函数来创建一维数组
    • 3.数组的元素值的访问
    • 4.数组元素的赋值方式
    • 5.数组的注意事项
  • 二维数组的创建和使用
    • 1.二维数组的创建
    • 2.二维数组的数组元素值访问
    • 3.二维元素的数组元素赋值
  • 数组的常用函数
    • 1.快速创建数组的函数
    • 2.数组统计函数
    • 3.数组指针函数
    • 4.数组和变量间的转换函数
    • 5.数组遍历的常用函数
    • 6.数组检索函数
    • 7.数组排序函数
    • 8.数组集合运算函数
    • 9.php数组提供的数据结构函数(栈,队列)

数组的概念

  • 数组是一组批量的数据存储空间,且这一段空间是连续的,每个存储空间都存储了一个数组元素。
  • 元素之间通过使用 “键” 来识别,通过数组名和 “键” 来组合访问。
  • php中的数组的键值可以是字符型,整型,浮点型,布尔型,对象 也可以嵌套数组形成二维数组。
  • 但是一般情况下,为了便于调试和开发,数组的键大多都是字符型和整型(太灵活随意了也不好,还得严格一点)。
  • php中的数组可以自由扩充大小。

一维数组的创建和使用

1.直接将变量声明为数组元素

    1. 不指定元素的键,则默认键名从0开始递增
    <?php $colors[] =["black","blue","yellow"];var_dump($colors);
    ?>
    

  • 2.在声明时指定元素的键 通过 键=>值的方式

    <?php// 这里实际上是将这5个元素全部都填充到了数组的第一维,后面如果添加的话,就会使数组变成多维数组$peoples[] = ["p1"=>"张三","p2"=>"李四","p3"=>"王五","p4"=>false,"p5"=>null];var_dump($peoples);
    ?>
    


    如果添加数组元素时不指定键,则默认使用当前数组中的已有元素最大整数键上面加1。

       <?php //上面一开始初始化数组时,相当于 0=>[5个元素],所以这一次应该是 1=>["白一"]$peoples[] = "白一";// 现在其实已经变成了三维数组$peoples["p6"] = "猴六";var_dump($peoples);?>
    


    下面是在同一维数组中,添加数组元素:

    <?php $names["name1"] = "夜雨声烦";$names["name2"] = "大漠孤烟";$names["name3"] = "一叶知秋";$names["name4"] = "长河落日";var_dump($names);$names["addName"] = "魔欲乘风";var_dump($names);
    ?>
    


2.通过array()函数来创建一维数组

array()函数可以用键值对的方式并且以逗号分隔来对数组初始化 ,array(“key”=>“value”,“key”=>“value”,);

 <?php$humans = array("h1"=>"张三","h2"=>"李四","h3"=>"王五","h4"=>"赵六","h5"=>"马奇");var_dump($humans);//这里你就能看到与上面自己手动初始化的不同了// 使用array()函数,默认是在一个一维数组里面添加$humans["h6"] = "猴六";var_dump($humans);?>



使用array()函数,默认是在一个一维数组里面添加(末尾追加的方式)

3.数组的元素值的访问

通过 $数组名[键名] 的方式来访问数组元素

 <?php$arr_test = array("demo1"=>"zhang","demo2"=>"san");var_dump($arr_test["demo1"]);//string(5) "zhang"?>

4.数组元素的赋值方式

在php数组中,数组元素的赋值也和变量一样,分为两种传值赋值传地址赋值

  • 1.传值赋值

    传值方式不会改变原本的数组内容

    <?php$src_arr = array("t1"=>"demo1","t2"=>"demo2");var_dump($src_arr); // array(2) {["t1"]=> string(5) "demo1" ["t2"]=> string(5) "demo2"}$dest_arr = $src_arr;var_dump($dest_arr);// array(2) {["t1"]=> string(5) "demo1" ["t2"]=> string(5) "demo2"}$dest_arr["t1"] = "t1";var_dump($src_arr);// array(2) {["t1"]=> string(5) "demo1" ["t2"]=> string(5) "demo2"}var_dump($dest_arr);// array(2) {["t1"]=> string(2) "t1" ["t2"]=> string(5) "demo2"}
    ?>
    
  • 2.传地址赋值

    传地址方式会改变原有的数组内容

    <?php $src_arr1 =  array("t1"=>"demo1","t2"=>"demo2");$dest_arr1 = &$src_arr1;var_dump($src_arr1);//array(2) {["t1"]=> string(5) "demo1" ["t2"]=> string(5) "demo2"}var_dump($dest_arr1);//array(2) {["t1"]=> string(5) "demo1" ["t2"]=> string(5) "demo2"}$dest_arr1["t1"] = "t1";var_dump($src_arr1);//array(2) {["t1"]=> string(2) "t1" ["t2"]=> string(5) "demo2"}var_dump($dest_arr1);//array(2) {["t1"]=> string(2) "t1" ["t2"]=> string(5) "demo2"}
    ?>
    

5.数组的注意事项

数组的注意事项:

  • 如果数组元素的键是一个浮点数,那么它会被强制转换为整数。比如 1.3 --> 1 。如果是布尔型,则 true -> 1,false ->0
  • 如果数组元素的键是一个字符串,且它的内容就是一个数字,则它会被强制转换为整型的数字( “123.5” -> 123)
  • 数组元素的键是唯一的,不能重复,如果重复则会覆盖之前的内容
  • 数组元素的键,要尽量避免使用未定义的常量和变量,因为其底层php预处理器会将这些未定义的变量和常量转换为字符串,浪费资源,且可读性不高

二维数组的创建和使用

二维数组的创建,其实就是嵌套使用array()函数,然后其数组元素的访问和赋值与一维数组是一模一样的过程。

1.二维数组的创建

嵌套使用array()函数,生成二维数组。

<?php$ds_array = array("st1"=>array("姓名"=>"叶秋","性别"=>"男"),"st2"=>array("姓名"=>"小白","性别"=>"女"));var_dump($ds_array);
?>

2.二维数组的数组元素值访问

二维数组值的访问,就是 $数组名[行][列] $数组名[一维键名][二维键名]

<?php$ds_array = array("st1"=>array("姓名"=>"叶秋","性别"=>"男"),"st2"=>array("姓名"=>"小白","性别"=>"女"));var_dump($ds_array);var_dump($ds_array["st1"]);// array(2) { ["姓名"]=> string(6) "叶秋"  ["性别"]=> string(3) "男"}var_dump($ds_array["st1"]["姓名"]);//string(6) "叶秋"
?>

3.二维元素的数组元素赋值

二维数组的数组元素赋值,和一维数组是一模一样的,我就简单的举几个例子

<?php$ds_array = array("st1"=>array("姓名"=>"叶秋","性别"=>"男"),"st2"=>array("姓名"=>"小白","性别"=>"女"));$ds_array["st1"] = array("姓名"=>"张三","性别"=>"男");$ds_array["st3"] = array("姓名"=>"吕小布","性别"=>"男");$ds_array["st2"]["姓名"] = "黄月英";var_dump($ds_array);
?>

传值和传地址赋值也是和一维数组一模一样,就pass掉啦。

传地址赋值会导致原本的数组内容发改变,同一个数组被两个变量指向,传值赋值不会,它相当于是一个副本copy.

数组的常用函数

php数组十分灵活和强大,它的键值可以是多种类型,而且它的键可以是连续或者不连续的。php为数组提供了丰富且功能强大的数组处理函数。(API调用工程师,哈哈哈)。

1.快速创建数组的函数

函数名 语法格式 功能
range() array range(mixed start,mixed end) 快速创建一个从start到end范围的数字数组或字符数组
explode() array explode(string separator,string str) 使用指定的字符串分隔符分割字符串,将得到的子串放到数组中
array_combine() array array_combine(array keys,array values) 创建一个新的数组,将数组keys的值作为新数组的键,将数组valus的值作为新数组的值
array_fill() array array_fill(int start_key, int length ,mixed value) 创建一个数组,将该数组填充length个数组元素,数组元素的键从start_key 开始递增,数组元素的值为value
array_pad() array array_pad(array array, int length, mixed value) 返回array 数组的一个副本,然后使用value去填充到length指定的长度,如果length为正数则填充到右侧,为负数则从左侧开始填充,如果length 小于或者等于array的长度,则不进行填充

2.数组统计函数

函数名 语法格式 功能
count() int count(Countable array $value, int $mode = COUNT_NORMAL) 统计array中元素的个数并且返回, COUNT_NORMAL默认是0,只计算第一维度的元素个数,如果将其改为1,则会递归计算当前多维数组中的所有元素
max() mixed max(array arr [,array…]) 统计并计算数组arr中的最大值
min() mixed min(array arr [,array…]) 统计并计算数组arr中的最小值
array_sum() number array_sum(array arr) 统计并计算数组arr中的所有元素值的和,返回类型为整型或者浮点型数值
array_product() number array_product(array arr) 统计并计算数组arr中所有元素值的乘积,返回类型为整型或者浮点数

3.数组指针函数

php为每一个创建的数组,都建立了一个对应的“内部指针系统”。“内部指针系统”会为每一个新建的php数组,自动的建立一个“当前指针”指向数组的第一个元素,每个元素内部有一个指针(next)指向下一个元素,一个指针(prev)指向上一个元素。

函数名 语法格式 功能
key() mixed key(array &arr) 返回数组arr中“当前指针”所指元素的“键名”
current() mixed current(array &arr) 返回数组arr中“当前指针”所指元素的“值”
next() mixed next(array &arr) 移动数组arr“当前指针”,使当前指针指向数组arr的下一个元素,然后返回“当前指针”所指的元素“值”
end() mixed end(array &arr) 移动数组arr“当前指针”,使当前指针指向数组arr的最后一个元素,然后返回“当前指针”所指的元素“值”
prev() mixed prev(array &arr) 移动数组arr“当前指针”,使当前指针指向数组arr的上一个元素,然后返回“当前指针”所指的元素“值”
reset() mixed reset(array &arr) 移动数组arr“当前指针”,使当前指针指向数组arr的第一个元素,然后返回“当前指针”所指的元素“值”
each() mixed each(array &arr) 以数组的形式返回“当前指针”所指的元素(键名和值),然后移动数组arr“当前指针”,使当前指针指向数组arr的下一个元素

4.数组和变量间的转换函数

函数名 语法格式 功能
list() void list(mixed varname1 [,mixed varname2 [,mixed…]]) = array arr 用一步操作给一组变量赋值,list()语言结构中定义变量名varname1,varname2…变量值在数组arr中
extract() int extract(array arr ) 使用数组arr定义一组变量,其中变量名为数组arr元素的键名,变量值为数组arr元素键对应的值。
compact() array compact( mixed varname1 [,mixed varname2 [,mixed…]]) 返回一个数组,数组每个元素的键名为变量名varname1,varname2…,每个数组元素的值为变量varname1,varname2…的值

5.数组遍历的常用函数

  • foreach(array as v a l u e ) 每次循环中,“当前指针”所指元素的“值”赋给变量 value) 每次循环中,“当前指针”所指元素的“值”赋给变量 value)每次循环中,“当前指针”所指元素的“值”赋给变量value,然后移动数组array的指针,使“当前指针”指向下一个元素,直至数组array中的最后一个元素(最后一个元素的当前指针为空)。

  • foreach(array as k e y = > key=> key=>value)
    每次循环中,“当前指针”所指元素的键名赋给变量 k e y , 元素的“值”赋给变量 key,元素的“值”赋给变量 key,元素的“值”赋给变量value,然后移动数组array的指针,使“当前指针”指向下一个元素,直至数组array中的最后一个元素(最后一个元素的当前指针为空)。

<?php
$info =array('coffee','tea','water');
foreach ($info as $value){echo $value."     ";//coffee     tea     water
}foreach ($info as $key=>$value){echo $key."=>".$value."      ";//0=>coffee      1=>tea      2=>water
}
?>

6.数组检索函数

函数名 语法格式 功能
array_keys() array array_keys( array arr [,mixed searchValue]) 以数组的形式返回arr数组中的所有键名。如果指定了可选参数searchValue,则只返回searchValue对应的键名(如果searchValue是字符串,则会区分大小写)。
array_values() array array_values(array arr) 以数组的形式返回数组arr中所有的元素值(过滤掉数组arr中重复的元素值),且新的数组的键为连续的整数。
in_array() bool in_array( mixed searchValue, array arr [,bool strict]) 在数组arr中搜索给定的(searchValue)值,如果找到则返回true,否则返回false.第三个参数默认值为false,如果改为true,则还会确认找到的字符串和搜索的字符串是否类型一致。
array_key_exists() bool array_key_exists(mixed keyName,array arr) 检查数组arr中是否存在键名keyName,如果存在返回true,否则返回false
array_search() mixed array_search( mixed searchValue, array arr [,bool strict]) 在数组arr中搜索给定的(searchValue)值,如果找到则返回对应的键名,否则返回false.第三个参数默认值为false,如果改为true,则还会确认找到的字符串和搜索的字符串是否类型一致。
array_unique() array array_unique( array arr) 移除数组arr中重复元素值的数组元素,并返回移除重复数组元素值的新数组

7.数组排序函数

函数名 语法格式 功能
sort() bool sort(array &arr) 按照元素值的升序对数组arr进行排序,如果排序成功则返回true,否则返回false.sort()函数排序后,数组arr的键会变成整数递增的键
asort() bool asort(array &arr) 按照元素值的升序对数组arr进行排序,并且保持其数组原有的“键值对”对应关系不变
rsort() bool rsort(array &arr) 按照元素值的降序对数组arr进行排序,如果排序成功则返回true,否则返回false.rsort()函数排序后,数组arr的键会变成整数递增的键
arsort() bool arsort(array &arr) 按照元素值的降序对数组arr进行排序,并且保持其数组原有的“键值对”对应关系不变
ksort() bool ksort(array &arr) 对数组arr按照键名升序排序,并且保持数组元素原有的“键值对”对应关系不变,如果排序成功则返回true,否则返回false
krsort() bool krsort(array &arr) 对数组arr按照键名降序排序,并且保持数组元素原有的“键值对”对应关系不变,如果排序成功则返回true,否则返回false
natsort() bool natsort(array &arr) 自然排序,对数组arr元素值进行升序排序,并且保持数组元素原有的“键值对”对应关系不变
natcasesort() bool natcasesort(array &arr) 自然排序,对数组arr元素值进行不区分字母大小写的升序排序,并且保持数组元素原有的“键值对”对应关系不变
shuffle() bool shuffle(array &arr) 为数组arr进行随机排序,且随机排序后数组arr的键名发生改变
array_reverse() array array_reverse(array arr [,bool preserve_keys]) 返回一个和数组arr元素顺序相反的新数组,如果preserve_keys为true则保持数组原有的“键值对”对应关系不变

8.数组集合运算函数

函数名 语法格式 功能
array_merage() array array_merage(array arr1 [,array arr2 [,array …]]) 将数组arr1,arr2…等数组合并成为一个新的数组。如果元素的键名相同,则后面数组的元素值覆盖掉前面数组的元素值,若元素的键名相同,且其为数字则不进行覆盖,而是原样末尾追加到新数组中。
array_diff() array array_diff(array arr1 [,array arr2 [,array …]]) 返回一个新数组,新数组中元素的是在arr1数组中且不在其他任何参数数组中的元素(集合的差集运算)
array_intersect() array array_intersect(array arr1 [,array arr2 [,array …]]) 返回一个新数组,新数组中元素的是既在arr1中又在arr2等数组中出现的元素(集合的交集运算)
array_diff_assoc() array array_diff_assoc(array arr1 [,array arr2 [,array …]]) 返回一个新数组,新数组中的元素是在arr1数组中,但不在其他任何参数数组中的元素(集合的差集运算)
array_intersect_assoc() array array_intersect_assoc(array arr1 [,array arr2 [,array …]]) 返回一个新数组,新数组中的元素是既在arr1中又在arr2等数组中出现的元素(集合的交集运算)
array_diff_key() array array_diff_key(array arr1 [,array arr2 [,array …]]) 返回一个新数组,新数组中的元素的是在arr1但不在其他任何参数数组中的元素(集合的差集运算)
array_intersect_key() array array_intersect_key( array arr1 [,array arr2 [,array …]]) 返回一个新数组,新数组中的元素的是既在arr1中也在arr2等数组中出现的元素键(集合的交集运算)

9.php数组提供的数据结构函数(栈,队列)

函数名 语法格式 功能
array_push() int array_push(array &arr,mixed var1[,mixed var2[,mixed …]]) 将数组arr当作一个栈,并且将var1,var2依次压入栈,最后返回新数组(栈)中的元素个数。
array_pop() mixed array_pop(array &arr) 弹出该数组的最后一个元素并且返回该元素值
array_unshift() int array_unshift(array &arr,mixed var1[,mixed var2[,mixed …]]) 将数组arr当作一个队列,并且将参数var1,var2依次插入队列中。返回入队元素个数(队列先进先出)
array_shift() mixed array_shift() 删除数组arr的第一个元素,并返回该元素值,如果为空则返回null。 (队列的删除,从头开始删除)

php学习笔记-php数组的创建和使用,数组常用函数-day03相关推荐

  1. ASM学习笔记2 - 类的创建和修改 —— ClassWriter的综合应用

    ASM学习笔记2 - 类的创建和修改 -- ClassWriter的综合应用 上回我们说到,通过使用ClassVisitor和ClassReader,我们能够分析已经存在的类.这一节中,我们将使用Cl ...

  2. V-rep学习笔记:机器人模型创建2—添加关节

    下面接着之前经过简化并调整好视觉效果的模型继续工作流,为了使模型能受控制运动起来必须在合适的位置上添加相应的运动副/关节.一般情况下我们可以查阅手册或根据设计图纸获得这些关节的准确位置和姿态,知道这些 ...

  3. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程

    前面maven 学习笔记(二)已经说过了怎样通过插件创建一个简单的工程,有了前面的基础,创建一个较复杂的工程就容易了很多.同样是通过已经有了插件,同样如果插件系统中并未存在,还是需要通过Add Arc ...

  4. Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件

    Pyqt学习笔记(1) ----- 创建按钮,并添加单击事件 from PyQt5 import QtCore, QtGui, QtWidgets import sys from PyQt5.QtGu ...

  5. oracle创建索引index,【学习笔记】Oracle索引 创建含sysdate的函数index案例

    天萃荷净 分享一篇运维DBA需求,创建含sysdate的函数index案例 1.模拟Oracle数据库环境 创建表插入数据库 [oracle@node1 ~]$ sqlplus chf/oraclep ...

  6. UE5 Shader基础学习笔记——01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合

    UE5 Shader基础学习笔记--01-12 图形管线/创建shader/数学节点/贴图压缩/LerpDotUV/常用向量/坐标空间/MinMaxClampSaturate/法线贴图混合 Lec01 ...

  7. Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度 Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quar

    Quartz.NET 2.0 学习笔记(5) :实例创建Windows服务实现任务调度 Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quartz ...

  8. 菜鸟学习笔记:Java基础篇6(数组、字符串)

    菜鸟学习笔记:Java常用类(数组.字符串) 数组 概述 数组的定义 二维数组 数组查找和排序 查找 排序 数组运用--字符串 不可变字符序列(String) 可变字符序列(StringBuilder ...

  9. 数据结构学习笔记(四):重识数组(Array)

    目录 1 数组通过索引访问元素的原理 1.1 内存空间的连续性 1.2 数据类型的同一性 2 数组与链表增删查操作特性的对比 2.1 数组与链表的共性与差异 2.2 数组与链表增删查特性差异的原理 3 ...

最新文章

  1. 自动驾驶LiDAR点云深度学习综述
  2. 电脑怎么分屏2个显示器_程序员一台电脑装2个显示屏?因为专业
  3. android程序包括哪几种文件,apk是什么文件
  4. python集合类型的四种操作符_深入解析Python中的集合类型操作符
  5. mysql 讲义_MySQL 讲义
  6. mybatis的二级缓存
  7. 算法竞赛入门经典(第二版) | 例题4-5 追踪电子表格中的单元格 (UVa512,Spreadsheet Tracking,World Finals)(解法一)
  8. OpenCV:判定曲线为弧线的简单方法
  9. 学习笔记(18):Python网络编程并发编程-守护进程
  10. visual studio 2017 显示行号
  11. linux不编译设备树,petalinux 编译时报设备树语义错误
  12. Java 学习笔记之 线程安全
  13. java jtextarea 显示_Java开发网
  14. java外文文献_spring框架外文文献 PDF 下载
  15. 【数字图像处理】直方图规定化(含实现代码)
  16. 关于EMS,邮政快递包裹,邮政标准快递,邮政小包,EMS经济快递
  17. HPSocket C++控制台版DEMO
  18. 计算机用word做海报,如何使用word文档制作精美海报
  19. 百度地图 和百度导航及语音集成冲突解决办法
  20. 工厂方法 VS 抽象工厂

热门文章

  1. GPS北斗授时卡(pci授时卡)卫星授时技术参数介绍
  2. matlab筛选excel数据统计,能环水体治理项目(Matlab读取Excel,基本案例筛选)【六】...
  3. 常见PHP实现URL地址跳转代码
  4. 【计算智能】读书笔记 第六章节 粒子群优化算法
  5. 致远oa漏洞修复 V5低版本V5.6~V 8.2版本Flash替换为H5化流程图的补丁包
  6. 正点原子STM32MP157学习——1.开发环境及基本知识
  7. 安卓修改gps定位模拟百度地图移动
  8. JSONObject对象常用方法讲解--fromObject和toBean
  9. A20 Plus(esp8266与A6C)拍照传输图片
  10. 关于VISIO绘图如何清晰导入WORD保持不变型,不留白边