然后开始使用这2个函数和while循环结构来实现数组遍历:
形式:
reset($arr1);
while ( list ($key, $value ) = each( $arr1) ) //从数组$arr1中一次次取出元素,
//当each到数组最后的时候,就返回false,即此时循环结束
{
//这里,就可以对$key ,和$value进行操作了。
}

(1)foreach遍历

 foreach( $arr   as   [ $key  => ] $value )    //$key可以称为键变量,$value可以称为值变量。
{
//这里就可以对$key 和 $value 进行所有可能的操作——因为他们就是一个变量
//$key 代表每次取得元素的下标,可能是数字,也可以能是字符串
//$value 代表每次取得元素的值,可能是各种类型。
//此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。
}

      那个中括号的内容可以省略

遍历的基本原理:

      每个数组,其内部都有一个“指针”,该指针决定了该数组当前取值的时候,取到的元素。

      foreach遍历过程中,都是依赖与该指针而进行的!

      举例:$arr1 = array(2=>1,  ‘dd’=>5,  1=>1.1,  “abc”,  0=>true)

指针除了负责foreach循环的位置设定之外,还有其他一些函数也依赖于该指针:

 , $v1 = current( $arr1);    //取得$arr1中当前指针所指向的元素的值,如果没有指向元素,则为false

 , $v1 = key($arr1);     //取得$arr1中当前指针所指向的元素的下标,。。。。。false

 , $v1 = next($arr1 );     //将指针移向“下一个元素”,然后取得该下一个元素的值;

 , $v1 = prev($arr1);      //将指针移向“上一个元素”,然后取得该上一个元素的值

 , $v1 = reset($arr1);     //将指针移向“第一个元素”,然后取得该元素的值——数组指针初始化

6, $v1 = end($arr1);       //将指针移向“最后一个元素”,然后取得该元素的值


7, $v1 = each($arr1);      //取得当前元素的下标和值,然后移动指针到下一个位置。

 

(2)for+   next   +reset遍历:

 reset( $arr1 );    //重置数组,即:数组指针初始化,这里,返回的数据被“丢弃”了。
$len = count( $arr1);
for($i = ; $i < $len $i++){
$key = key ($arr1 ); //下标
$value = current( $arr1 ); //值
//然后这里就可以对$key 和 $value进行任何作为变量的操作
next($arr1);//这里,移动指针到下一个元素(也同时丢弃了返回值)
} **************************************************************************************************************************************
************************************************************************************************************************************
$v=array(12,13,14,'abc','fhskjf',43);
reset($v);
$length=count($v);
for($i=0;$i<$length;$i++){
echo key($v);
echo "\n";
next($v);
}

(3)while   +each()   +list()  遍历

 each()函数解释:
each()函数可以取得一个数组中的一个元素的下标和值,然后再放入一个新的数组中,并且指针后移一位。
该新的数组,有4个元素,但存储的是下标和值的“双份”,类似下述形式:
array(
=> 取出来的值,
‘value’ = >取出来的值,
= > 取出来的下标(键名),
‘key’ => 取出来的下标(键名)
);

 list()函数解释:
使用形式:
list($v1, $v2, $v3,$v4 .... )= 数组$arr1;
其作用是:依次取得数组$arr1中下标为0,,,, ....的元素的值,并一次性放入多个变量中(一一对应)
即其相当于如下语句:
$v1 = $arr1[];
$v2 = $arr1[];
$v3 = $arr1[];
$v4 = $arr1[];
..........
但是注意:只能实现这样的“从0开始的连续数字下标的元素的取值”(但并非要求数组的元素的顺序为同样的数字顺序)

 然后开始使用这2个函数和while循环结构来实现数组遍历:
形式:
reset($arr1);
while ( list ($key, $value ) = each( $arr1) ) //从数组$arr1中一次次取出元素,
//当each到数组最后的时候,就返回false,即此时循环结束
{
//这里,就可以对$key ,和$value进行操作了。
}

20)PHP,数组的遍历的更多相关文章

  1. PHP之旅3 php数组以及遍历数组 以及each() list() foreach()

    php的数组的定义 <?php //php中定义数组时可以通过索引直接进行赋值: $mArr[0]="哈哈"; $mArr[1]=70; $mArr[2]='haha'; e ...

  2. 第27天:js-表单获取焦点和数组声明遍历

    一.表单 1.this指事件的调用者2.input.value 表单更换内容3.innerHTML更换盒子里的内容,文字.标签都能换.4.isNaN("12")如果里面的不是个数字 ...

  3. for+next()实现数组的遍历及while list each 的使用

    //要求使用for循环语句来完成该数组的遍历//输出每一项的键名和对应值:    $a = array(           'a' => 34,           5 => 51,  ...

  4. jQuery数组的遍历 function的加载

    加载函数时会被覆盖在jQuery中给提供的方案有三种形式 js中只能绑定一个方法 如果多次绑定后者会覆盖前者 最常用的一种 在jQuery中数组的遍历 使用map遍历数组  会返回一个新的数组  如果 ...

  5. 手写js代码(一)javascript数组循环遍历之forEach

    注:原文地址http://blog.csdn.net/oscar999/article/details/8671546 我这里是仿照学习! 1.js的数组循环遍历 ①数组的遍历首先想到的是for()循 ...

  6. 初识Javascript.03 -- switch、自增、while循环、for、break、continue、数组、遍历数组、合并数组concat

    除了注意大小写,别的木啥了 Switch语句 Switch(变量){ case 1: 如果变量和1的值相同,执行该处代码 break; case 2: 如果变量和2的值相同,执行该处代码 break; ...

  7. PHP二维关联数组的遍历方式

    采用foreach循环对二维索引数组进行遍历,相对来讲速度更快,效率更高,foreach循环是PHP中专门用来循环数组的.实例也相对简单,多加练习,想清楚程序运行逻辑即可. <?php $arr ...

  8. javascript:Json 和数组的遍历

    首先看代码示例var json={a:1,b:2,c:3}; //json var array={1,2,3}; //数组 alert(json.a); //弹出1 或alert(json['a']) ...

  9. java 数组声明定义 数组内存分配 数组初始化 数组引用 数组的遍历

    一,数组的定义 Java 中定义数组的语法有两种: 1. type arrayName[]; 2. type[] arrayName;type 为Java中的任意数据类型,包括基本类型和组合类型,ar ...

  10. javascript(基础)_对数组的遍历方法总结(find, findIndex, forEach,)

    一.前言                                                                                                ...

随机推荐

  1. PAT Advanced 1102 Invert a Binary Tree (25) [树的遍历]

    题目 The following is from Max Howell @twitter: Google: 90% of our engineers use the sofware you wrote ...

  2. javaweb03 javaservlet基础一

    1.使用JavaEE版的eclipse开发动态的WEB工程(JavaWEB 项目)1).把开发选项切换到JavaEE2).可以在window -> Show View 中找到Package Ex ...

  3. Ubuntu Teamviewer安装使用

    关于Ubuntu环境下teamviewer的安装(亲测可用-) 以下内容均转自:https://blog.csdn.net/weixin_41887832/article/details/798329 ...

  4. 覆盖(重写)&隐藏

    成员函数被重载的特征(1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. 覆盖是指派生类函数覆盖基类函数,特征是(1)不同的范围(分别位于 ...

  5. SeetaFaceEngine系列1:Face Detection编译和使用

    SeetaFace,根据GitHub上的介绍,就是一个开源的人脸检测.矫正和识别的开源库,是采用C++来编写的,并且是在CPU上执行的,没有用到GPU,但是可以用SSE或者OpenMP来加速.整个库分 ...

  6. Pythia:Facebook最新开源的视觉、语言多任务学习框架

    Facebook 发布了一个全新的多任务学习框架 Pythia,它基于 PyTorch 且可用于视觉和语言的联合任务.Pythia 是一种模块化的即插即用框架,数据科学家和机器学习开发者能快速构建.复 ...

  7. 23. docker 数据持久化 bind mounting

    1. bind mounting 和 data volume 的区别 data volume 需要在 Dockerfile 定义 Volume bind mounting 只需要 -v 指明 容器外部 ...

  8. Python说文解字_继承过程中的参数集合

    1. 先看一段属性继承的代码: class User: def __init__(self,name,age): self.name = name self.age = age class User1 ...

  9. Java目录下文件夹的含义和运行机制

    Java安装目录下的各个文件夹的意义 >bin 放置Java所有的可执行文件 >include 一些C语言的头文件 >jre Java的运行环境 >lib Java的类库文件 ...

  10. Xcode7以后访问http加密

    Xcode7 在Info.plist中add Row添加NSAppTransportSecurity类型Dictionary. 在NSAppTransportSecurity下添加NSAllowsAr ...