0

0

PHP基础教程八之数组

黄舟

黄舟

发布时间:2017-03-01 09:48:50

|

1525人浏览过

|

来源于php中文网

原创

本节讲解内容

前言

在前面我们所学的不管是变量和常量,都是一个个单个的数据,而有时候我们有这样的需求,需要把一些相同类型的数值或一些不相干的数值,合理的存储起来,而用到的时候可以按照某种规则取出数据。这时候前面的变量等就不能满足要求,在这里就是用到数组。

数组的介绍

PHP中的数组和别的语言的数组不一样,这也是PHP语言语法的松散性造成的。那有什么不一样?

所谓数组,就是相同数据类型或不同的数据类型元素按一定顺序排列的集合,就是把有限个变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

数组的定义通俗的理解就是存放数据的集合,

 12 [1] => 1 [2] => [3] => abcd [4] => 12.2 )

可以看到在数组中存放各种数据类型,在输出的时候都可以进行输出。并且可以看到在输出的时候,每个数值都有一个下标于之对应,这个下标就称之为键(key),而数值是值(value),我们在想取某个值得时候可以通过键来取。

$a = 数组名[键名]
echo $arr[0];
.....结果......
12

当数组的键值是数字的时候,它的下标是从0开始计算的。

那么数组的怎么创建的呢?

数组创建的三种方式

  • 索引数组(下标是数字的)在PHP中定义数组的方式有三种。

  • 关联数组(下标是字符串)

  • 数组的下标两者都有。

第一种

 1 [1] => 2 [2] => 3 [3] => 4 [4] => abcd [5] => 1 )

用 array() 语言结构来新建一个数组,从输出结果中可以看到下标是数字。而取数据也是通过数字下标来取的。这就是索引数组。

第二种

来定义键和值
    $arr = array('a' => 1,'b' => 2,'c' => 'abcde', 'd' => true);
    print_r($arr);
.....结果......
Array ( [a] => 1 [b] => 2 [c] => abcde [d] => 1 )

这种方法也是用array()语法结构来定义的,但是数组的下标是我们自己定义的,这里可以根据自己的情况自己定义下标。关于键值得定义需要注意,key 会有如下的强制转换

  1. 包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。

  2. 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。

  3. 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。

  4. Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。

  5. 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。

如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

取关联数组中的值需要使用自己定义的键来取。

第三种

 1 [2] => 2 [a] => 12 [4] => 45 )

第三种数组的定义可以直接用方括号进行定义,系统会默认的认为这是一个数组,并进行创建。至于下标你可以使用数字或者字符串。但是如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

数组的动态增长

PHP的数组的长度是一个不固定的,当你填完数据时候,你还是可以进行填写数据的,同时数组的长度也会跟着增加,这就是php数组的动态增长。

 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

上面的代码利用一个for循环,使用数组的第三种定义方式进行赋值,但是可以看到我们并没有在数组的方括号里面写下标,但是程序并没有报错,这是因为数组的动态增长。如果未指定key的值,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。因此,在输出结果中可以看到下标是从0开始自动增长的。

数组的遍历

前面我们介绍了数组的创建和基本的使用,那么怎么从数组中全部的取出里面的值?在PHP中,可以使用循环控制流程取到数组中的值,通过循环遍历数组来逐个得到里面的值。

齐博B2B电子商务系统
齐博B2B电子商务系统

齐博B2B系统是一款基于PHP程序和Mysql数据库为基础的开源B2B行业门户电子商务网站建站系统, 系统代码完整、开源,功能全面,架构优秀,提供良好的用户体验、及管理平台,是目前搭建B2B行业门户网站最好的程序之一。齐博B2B具有的功能特点包括:通行证整合功能通过通行证的整合,可以与流行的PHPWIND论坛或Discuz论坛以及Ucenter中心等进行通讯,从而为用户提供更多的交流场所,增加网站

下载

for

在数组的遍历中可以使用for来的到数组里面的值。

上面的count()这个系统函数是统计一个数组里的所有元素,或者一个对象里的东西。从而的到数组的大小,也就是长度。然后通过for循环,把$i当做数组的下标($i从0开始)。

foreach

在上面的代码中如果我们的数组是关联数组,也就是数组的下标是一个字符串,那么上面的代码是不可能取出来。所以我们可以使用PHP提供的另外一种循环方法:foreach()。它的语法有两种:

foreach(数组名 as $key => $value){

}

foreach(数组名 as $value){

}

其中“as”是一个关键字,不能变。

foreach里面有可以有三个参数,第一个参数是数组的名字,第二个参数

value是用来存储从数组中取出来的值。当然键和值得名字可以根据自己的情况自己取。

当里面的参数是两个的时候,$value只用来存放从数组中取出来的值,而没有键。

 $value) {
        echo $key . '=>' . $value . '  ';
    }

    echo '
'; foreach ($arr as $value) { echo $value . ' '; } .....结果...... 0=>1 1=>9 2=>4 3=>2 4=>8 5=>10 6=>5 1 9 4 2 8 10 5

在第二个循环中没有键的输出。

上面的两种循环结构,就是我们常用到的数组遍历的方法,其中第二个方法,也就是用foreach的方法,我们会经常用到,因为这种方法对于所有的数组都适用,而不用考虑下标的问题。

数组的相关函数

  • count($array) 统计一个数组里的所有元素,或者一个对象里的东西。从而的到数组的大小,也就是长度。然后通过for循环,把

    i从0开始)。

  • is_array($arr) 判断变量是否是一个数组。传一个变量进去,如果这个变量是一个数组,则返回true,否则则返回false;

  • array_search (value) 在数组中搜索给定的值,如果成功则返回相应的键名 。当我们想知道一个数组中有没有一个数,可以使用这个函数,如果数组中有你想找的值,则返回这个值对应的键值。

  • array_reverse($arr),传进去一个数组,返回一个与这个数组相反的数组。

     5 [1] => 10 [2] => 8 [3] => 2 [4] => 4 [5] => 9 [6] => 1 )
  • array_merge($arr1,$arr2),传进去两个数组,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。

  • unset($value) 传进去的变量可以销毁一个数组,也可以销毁数组中的一个值,当通过数组[下标]的方式传入是,会销毁数组中的这个值,但是当传进去的数组时,会把整个数组进行销毁。

  • sort() 本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。当数组中值都是数字的时候,可以使用这个函数进行排序,不过排序的结果是数字按照从小到大的顺序。

     1 [1] => 2 [2] => 4 [3] => 5 [4] => 8 [5] => 9 [6] => 10 )
  • usort($array,func_name) 传进去一个数组,和一个自己写的方法名。使用用户自定义的比较函数对数组中的值进行排序,在上面的一个方法,你只能得到从小到大的顺序,但是我们的要求是从大到小,这就会用到这个函数,第二个参数是我们写的排序规则的函数。

     10 [1] => 9 [2] => 8 [3] => 5 [4] => 4 [5] => 2 [6] => 1 )

    这里使用到可变函数。

数组的运算符

我们在运算符那一节并没有讲到数组的运算符,其实数组也是有运算符的。

  • $a + $b 联合 $a 和 $b 的联合。运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。

  • $a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE 。

  • $a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE 。

  • $a != $b 不等 如果 $a 不等于 $b 则为 TRUE 。

  • $a $b 不等 如果 $a 不等于 $b 则为 TRUE 。

  • $a !== $b 不全等 如果 $a 不全等于 $b 则为 TRUE 。  
    在这里看来数组的运算符也是很好理解的。

总结

数组讲到这里,算是基本讲完了,数组在我们的开发中是经常用到的,不止上面的以为数组,有时候数组里面还可能是一个数组,只要数组的结构在脑海中有清晰的认识,不管有几个数组,都是可以解决的,同时数组的出现也引出了一些关于数组的算法。

 以上就是PHP基础教程八之数组的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

51

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

397

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

118

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

11

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 9.7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号