热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php学习笔记数组的声明与遍历

在php中数组是一个非常重要的数据存储类型,本文章主要是介绍了数据创建与数组删除及遍历查询数据值输出,下面一起来看看。数组的声明1、直

在php中数组是一个非常重要的数据存储类型,本文章主要是介绍了数据创建与数组删除及遍历查询数据值输出,下面一起来看看。

数组的声明

1、直接赋值的方式声明数组

$数组变量名[索引值] = 资料内容 //其中索引值(下标)可以是一个字符串或数字

但有的时候,我们也可以直接给数组赋值,并不填写“索引值”,那第此时,数组的下标就会自动以数字0开始增加。

$数组变量名[] = 资料内容 //其中索引值(下标)可以是一个字符串或数字

2、使用array()语言结构新建数组

在实际使用中我们可以用array()语言结构来新建一个数组,并初始化数组。

$数组变量名=array( key1 => value1, key2 => value2, ...... ,keyN => valueN );

当然,像上面我们并不一定就这样,我们有的时候会像下面这样来做:(区别在于索引值为数字)

$数组变量名=array( value1, value2, ...... , valueN );

3、多维数组的声明

多维数组其实也就是在数组里面再次存放数组。如下:

  1. $content = array ( 
  2. array(1,'高某','A公司','北京市'), 
  3. array(2,'高某1','B公司','北京市'), 
  4. array(3,'高某','C公司','北京市'
  5. ); 

数组的遍历

1、使用for语句循环遍历数组

在其它的编程语言中,数组的遍历通常都是使用for循环语句,通过数组的下标来访问数组中每个成员元素,但要求数组的下标必须是连续的数字索引。而在PHP中,不仅可以指定非连续的数字索引值,而且还存在以字符为下标的关联数组。所以在PHP中,其实是很少使用for语句来遍历数组。下面来晒一个例子给大家看一下,大家应该不会陌生,实例代码如下:

  1.    //使用array()语句将联系人列表中第一条记录声明成一维数组$contact 
  2.    $contact=array(1,"高某","A公司","北京市","(015)9582451","gao@php.com"); 
  3.    //以表格的形式输出一维数组中的每个元素 
  4.    echo ''//输出标记定义表格 
  5.    echo '
  6. '//输出表头 
  7.    echo ''//输出表格的行开始,背景为灰色 
  8.      
  9.    //以html的th标记输出表格的字段名称 
  10.    echo '
  11. '
  12.    echo '
  13. '
  14.    for($i=0;$i<count($contact);$i++){ //使用for循环来输出一维数组中的元素 
  15.    echo &#39;
  16. &#39;
  17.    } 
  18.    echo &#39;
  19. 联系人列表
    编号姓名公司地址电话EMAIL
    &#39;.$contact[$i].&#39;
    &#39;
    //输出表格的关闭标记 
  20.    ?> 

遍历多维数组时,要使用循环嵌套逐层进遍历。在此就不用代码列出来了。

2、使用foreach语句遍历数组

既然for循环语句在PHP中并不常用,那么就让我们来看一下foreach到底有什么可取之处吧!

foreach语句有两种语法格式,第二种比较次要但却是第一种有用的扩展。

第一种语法格式:

  1. foreach(array_expression as $value ){ 
  2.   
  3. 循环体 
  4.   

第二种语法模式:

  1. foreach(array_expression as $key => $value){ 
  2.       
  3.     循环体 
  4.       
  5.     } 

3、联合使用list()、each()、和while()、循环遍历数组

each()函数

each()函数需要传递一个数组作为参数,返回数组中当前元素的键/值对,并向后移动数组指针到下一个元素的位置。键/值对被返回为带有四个元素的关联和索引混合的数组,键名分别为0、1、key和value。其中键名0和key对应的值是一样的,是数组元素的键名,1和value则包含有数组元素的值。如果内部指针越过了数组的末端,则each()返回FALSE。each()函数的使用如下所示,代码如下:

  1.     //声明一个数组$contact作为each()函数的参数 
  2.     $contact=array("ID"=>1,"姓名"=>"高某","http://www.phpfensi.com公司"=>"A公司","地址"=>"北京市"); 
  3.       
  4.     $id=each($contact); //返回数组$contact中第一个元素的键/值对,是带有4个元素的数组 
  5.     print_r($id); //返回数组$id:Array([1]=>1[value]=>1[0]=>ID[key]=>ID) 
  6.     $name=each($contact); //返回数组Rcontact中第二个元素的键/值对,是带有4个元素的数组 
  7.     print_r($name); //返回数组$name:Array([1]=>高某 [value]=>高某 [0]=>姓名 [key]=>姓名) 
  8.     $company=each($contact); 
  9.     print_r($company); 
  10.     $address=each($contact); 
  11.     print_r($address); 
  12.     $no=each($contact); //已经到数组$contact的末端,返回false 
  13.     var_dump($no); //输出$no的值:bool(false) 
  14.       
  15.     ?> 

list()函数

这不是真正的函数,而是PHP的语言结构。list()用一步操作给一组变量进赋值,即把数组中的值赋给一些变量。list()仅能用于数字索引的数组并假定数字索引从0开始。语法格式如下所示:

list(mixed varname,mixed ...)=array_expression //list()语句的语法格式

list()语句和其它函数在使用上有很大的区别,并不是直接接收一个数组作为参数。而是通过“=”去处符以赋值的方式,将数组中每个元素的值,对应的赋给list()函数中的每个参数。list()函数又将它中的每个参数转换为直接可以在脚本中使用的变量。使用方法如下,实例代码如下:

  1.     $info=array(&#39;coffee&#39;,&#39;brown&#39;,&#39;caffeine&#39;); //声明一个索引数组$info 
  2.       
  3.     list($drink,$color,$power)=$info//将数组中的所有元素转为变量 
  4.     echo "$drink is $color and $power makes it special.n";//输出的三个变量值是数组中三个元素的值 
  5.       
  6.     list($drink, ,$power)=$info//将数组中的部分元素变为变量 
  7.     echo "$drink has $power.n"//输出的两个变更值是数组中的前两个元素的值 
  8.       
  9.     list(,,$power)=$info//跳过前两个变量只将数组中第三个元素的值转为变量 
  10.     echo "I need $power!n"//输出的一个变量值是数组中桃花汛三个元素的值勤 
  11.     ?> 

通过上例了解list()函数的用法之后,将each()函数和list()函数结合起来使用。代码如下:

  1.     $contact=array("ID"=>1,"姓名"=>"http://www.111Cn.Net","公司"=>"A公司","地址"=>"北京市"); 
  2.     list($key,$value)=each($contact); //将each()函数和list()函数联合使用 
  3.     echo "$key=>$value"//输出变量$key和$value,中间使用"=>"分隔 
  4. ?> 

while()循环遍历数组

while()循环的语法格式如下:

  1. while( list($key,$value) = each(array_expressin) ){ 
  2. 循环体; 

使用这种组合改写前面使用foreach遍历过的一维数组,代码如下所示:

  1.     //声明一个一维的关联数组$contact 
  2.     $contact=array("ID"=>1, 
  3.     "姓名"=>"高某"
  4.     "公司"=>"A公司"
  5.     "地址"=>"北京市"
  6.     "电话"=>"(010)987665432"
  7.     "EMAIL"=>"gao@php.com" 
  8.     ); 
  9.     //以HTML列表的方式输出数组中每个元素的信息 
  10.     echo &#39;
    一个联系人信息:&#39;
  11.     while(list($key,$value) = each($contact) ){ //将foreach语句改写成while,list()和each()的组合 
  12.     echo "
    $key:$value
    "
    //输出每个元素的键/值勤 
  13.     } 
  14.     echo &#39;&#39;
  15. ?> 

4、数组内部指针控制函数遍历数组

对于数组指针的控制PHP提供了以下几个内部函数可以利用。

》》current():是取得目前指针位置的内容资料

》》key():用来读取目前指针所指向资料的索引值

》》next():将数组中的内部指针移动到下一个单无

》》prev():将数组的内部指针倒回一位

》》end():将数组的内部指针向最后一个元素

》》reset():将目前指针无条件移至第一个索引位置

这些函数的参数都只有一个,就是要操作的数组本身。在下面的示例中,将使用这些数组指针函数控制数组中元素的读取顺序,代码如下所示:

  1.     //声明一个一维的关联数组$contact,使用"=>"去处符指定了每个元素的字符串下标 
  2.     $contact = array("ID"=>1, 
  3.     "姓名"=>"高某"
  4.     "公司"=>"A公司"
  5.     "地址"=>"北京市"
  6.     "电话"=>"(010)98765432"
  7.     "EMAIL"=>"gao@php.com" 
  8.     ); 
  9.     //数组刚声明时,数组指针在数组中第一个元素位置 
  10.     //使用key()和current()函数传入数组$contact,返回数组中当前元素的键和值 
  11.     echo &#39;第一个元素:&#39;.key($contact).&#39;=>&#39;.current($contact).&#39;
    &#39;
    //输出:第一个元素:ID=>1 
  12.     echo &#39;第一个元素:&#39;.key($contact).&#39;=>&#39;.current($contact).&#39;
    &#39;
    //数组指针没有移动,输出同上 
  13.       
  14.     next($contact); //将数组$contact中的指针向一个元素移动一次,指向第二个元素的位置 
  15.     next($contact); //将数组$contact中的指针向一个元素移动一次,指向第三个元素的位置 
  16.     echo &#39;第三个元素:&#39;.key($contact).&#39;=>&#39;.current($contact).&#39;
    &#39;
    //输出第三个元素的键和值 
  17.       
  18.     end($contact); //再将数组$contact中指针移动到最后,指向最后一个元素 
  19.     echo &#39;最后一个元素:&#39;.key($contact).&#39;=>&#39;.current($contact).&#39;
    &#39;
    //输出最后一个元素的键和值 
  20.       
  21.     prev($contact); //将数组$contact中的指针倒回一位,指向最后第二个元素 
  22.     echo &#39;最后第二个元素:&#39;.key($contact).&#39;=>&#39;.current($contact).&#39;
    &#39;
    //输出最后第二个元素的键和值 
  23.       
  24.     reset($contact); //再将数组$contact中的指针重置到第一个元素的位置,指向第一个元素 
  25.     echo &#39;又回到了第一个元素&#39;.key($contact).&#39;=>&#39;.current($contact).&#39;
    &#39;
    //输出第一个元素的键和值 
  26.     ?> 

数据排序

•sort() 函数用于对数组单元从低到高进行排序。

•rsort() 函数用于对数组单元从高到低进行排序。

•asort() 函数用于对数组单元从低到高进行排序并保持索引关系。

•arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。

•ksort() 函数用于对数组单元按照键名从低到高进行排序。

•krsort() 函数用于对数组单元按照键名从高到低进行排序。

例子代码如下:

  1. $arr = array("b""a""c"); 
  2. sort($arr); 
  3. print_r($arr); 
  4. ?> 
  5. //运行该例子输出: 
  6. //Array ( [0] => a [1] => b [2] => c ) 

在本例中, $arr 数组单元被按照字母顺序排序,而数组单元经过排序后,键值重新分配。

rsort()

PHP rsort() 函数行为与 sort() 相反,对数组单元进行由高到低排序,请参考 sort() 函数使用。

asort()

PHP asort() 函数用于对数组单元从低到高进行排序并保持索引关系,如果成功则返回 TRUE,失败则返回 FALSE。

语法:bool asort( array &array [, int sort_flags] )

可选参数 sort_flags 用以改变排序的行为,具体参见 sort()。

实例代码如下:

  1. $arr = array("b""a""c"); 
  2. asort($arr); 
  3. print_r($arr); 
  4. ?> 
  5. //运行该例子输出: 
  6. //Array ( [1] => a [0] => b [2] => c ) 
注:本文内容参考于《细说PHP》中的数组部分,仅作学习之余的个人笔记。

推荐阅读
  • Vue 2 中解决页面刷新和按钮跳转导致导航栏样式失效的问题
    本文介绍了如何通过配置路由的 meta 字段,确保 Vue 2 项目中的导航栏在页面刷新或内部按钮跳转时,始终保持正确的 active 样式。具体实现方法包括设置路由的 meta 属性,并在 HTML 模板中动态绑定类名。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文详细介绍了暂估入库的会计分录处理方法,包括账务处理的具体步骤和注意事项。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 极大似然估计(MLE)及其3D可视化解析
    本文详细介绍了极大似然估计(Maximum Likelihood Estimation, MLE)的推导过程,并通过3D可视化展示其在概率密度函数中的应用。我们将探讨如何利用MLE来估计参数,以及它在实际问题中的重要性。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 探讨一个老旧 PHP MySQL 系统中,时间戳字段不定期出现异常值的问题及其可能原因。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 郑州大学在211高校中的地位与排名解析
    本文将详细解读郑州大学作为一所位于河南省的211和双一流B类高校,在全国211高校中的地位与排名,帮助高三学生更好地了解这所知名学府的实力与发展前景。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
author-avatar
oo欣呐呐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有