php list、each函数遍历数组

我们来研究两个比较有意思的数组函数。这两个函数学起来不难。但是,有些同学会遇到一点点小困难。困难在于,找到list函数和each函数的操作特点。

list函数

我们先来讲list函数:

list ( mixed $变量1 [, mixed $变量n ] )

它的功能:将索引数组下标为0的对应我变量1,下标1的对应变量2,依此类推。

我们来通过实验来看一下:

<?php

list($one , $two , $three) = array('张三' ,'李四' ,'王五');

//再次声明:单引号不结释变量,所以输出的是字符串$one
echo '$one----'.$one.'<br />';
echo '$two----'.$two.'<br />';
echo '$three----'.$three.'<br />';

?>

我们来看一下实验结果:

QQ截图20161114132308.png

分析结果如图:

document_2015-09-03_55e8466feae5c.png

结论:

    1.将下标为0的张三赋值给了$one

    2.将下标为1的李四赋值给了$two

    3.将下标为2的王五赋值给了$three

因此,我们知道了list的功能就是从左到右,一一对应索引数组从0开始的下标值。

list的另外一种用法:

<?php

list( ,  , $three) = array('张三' ,'李四' ,'王五');

echo '$one----'.$one.'<br />';
echo '$two----'.$two.'<br />';
echo '$three----'.$three.'<br />';

?>

运行结果:

QQ截图20161114132428.png

结论:

    1.list当中的第一、二个放变量的地方留空,我只写了$three。

    2.按照一一对应原则,张三和李四没有变量可以对应。

    3.所以只有王五有变量对应

请严格记住:索引数组的一一对应原则。list第一个变量对应的是下标为0的数组元素,下标为1的对应的是list里面的第二个数组元素。

请猜猜下面的结果是多少? 为什么?

<?php
list($one, $two, $three) = array(2 => '张三', '李四', '王五');
echo '$one----' . $one . '<br />';
echo '$two----' . $two . '<br />';
echo '$three----' . $three . '<br />';
?>

运行结果如下图:

QQ截图20161114132543.png

总结:

    1.因为是一一对应原则,$one找不到下标为0的数组元素,$two找不到下标为1的数组元素,只有$three找到了下标为2的数组元素

    3.在list($one, $two, $three),我只写了三个变量。对应完成,无需再对应后面的变量了,丢弃李四和王五。

each函数

each 函数的规律性上面就更有特点了,并且比较有趣。

array each ( array &$array )

功能:传入一个数组。它会将其中的一个元素拆为个新数组。每次执行这样操作一个元素。执行一次先后移动一次,同样的方式操作下一个数组元素。执行到最后,返回false。

我们先来看看each是怎么操作的数组元素。

<?php

//定义一个变量叫$kongjie(空姐)
$kongjie=[
   'gao'=>'穿黑衣服的',
   'shou'=>'退特别长特别细',
   'mei'=>'好白',
   'pl'=>'五官端正',
   'type'=>'那就是女神',
   '我是吊丝不敢跟女神搭讪'
   ];

//第一次each
$data = each($kongjie);

echo '<pre>';
var_dump($data);
echo '</pre>';


?>

我们来看看第一次执行each的结果:

QQ截图20161114133313.png

总结:
1.读取了$kongjie中的第一个元素,将第一个元素('gao'=>'穿黑衣服的')分解开了。

    1分解后第一个元素变成了一个新数组。

    2在新数组里面,将原值(穿黑衣服的)放了索引下标1里面,同时放到了关联下标value里面。

    3在新数组里面,将原键(gao),放到了关联下标key里面,放到了索引下标0里面。

我们用图来表示:

document_2015-09-03_55e84f4676360.png

这样我们一下子就看明白了。

接下来我们说说each的另外一个特性。读一次,向后移动一个元素。

<?php

//定义一个变量叫$kongjie(空姐)
$kongjie=[
   'gao'=>'穿黑衣服的',
   'shou'=>'退特别长特别细',
   'mei'=>'好白',
   ];

//第一次each
$data = each($kongjie);

echo '<pre>';
var_dump($data);
echo '</pre>';

echo '-----华丽丽分割线------<br />';


//第2次each
$data = each($kongjie);

echo '<pre>';
var_dump($data);
echo '</pre>';

echo '-----华丽丽分割线------<br />';

//第3次each【执行到了最后一个元素了】
$data = each($kongjie);

echo '<pre>';
var_dump($data);
echo '</pre>';

echo '-----华丽丽分割线------<br />';

//第4次【此时,后面已没有可操作的元素了,看返回什么】
$data = each($kongjie);

echo '<pre>';
var_dump($data);
echo '</pre>';

echo '-----华丽丽分割线------<br />';

?>

执行结果:

QQ截图20161114133417.png

总结:

    1.读一次向后移动一次【可以想象有一个记录的箭头在移动】,将其中的每个元素拆解成一个新数组

    2.读取到最后,没有可操作的元素了,所以返回了false。

list 和each 配合

我们知道了list的特性,也知道了each的特性。那list是不是可以和each配合起来一起来完成一些工作呢?

list($key,$value) = each($array);

我们来看之前说到的这个图:

11.png

而list中的第一个变量会去找索引下面0的元素去赋值,第二个变量会找索引下标为1的元素对变量赋值。

我们来看看下面例子:

<?php

//定义一个变量叫$kongjie(空姐)
$kongjie=[
   'gao'=>'穿黑衣服的',
   'shou'=>'腿特别长特别细',
   'mei'=>'好白',
   ];

list($key,$value) = each($kongjie);

echo $key. '-----' .$value .'<br />';

?>

运行结果如下:

QQ截图20161114133523.png

总结:

    1.each 把变量拆成了4个元素

    2.而list把0 =>gao 赋值给了变量$key

    3.list把1 => 穿黑衣服的 赋值给了变量 $value

each到最后会返回false,因此我可以用布尔型循环while来配合完成数组的循环。

把上面的代码,轻轻一改就实现了如下效果:

<?php

//定义一个变量叫$kongjie(空姐)
$kongjie=[
   'gao'=>'穿黑衣服的',
   'shou'=>'退特别长特别细',
   'mei'=>'好白',
   ];

while(list($key,$value) = each($kongjie)){

   echo $key. '-----' .$value .'<br />';

}

?>

执行演示:

QQ截图20161114133617.png

总结:

    1.循环一次,执行一次each,执行代码,然后向后移动一个元素

    2.执行到最后返回fasle,因此停止执行。

    3.可以通过each和list配合实现foreach一样的效果。

作业:

使用list和each配合,将如下数组:

<?php
$arr=array(
   '教学部'=>array(
       array('李某','18','人妖'),
       array('高某','20','男'),
       array('张某','21','妖人'),
   ),
   '宣传部'=>array(
       array('李某','18','人妖'),
       array('高某','20','男'),
       array('张某','21','妖人'),
   ),
   '财务部'=>array(
       array('李某','18','人妖'),
       array('高某','20','男'),
       array('张某','21','妖人'),
   ),
);
?>

遍历显示出来,效果如下:

44.png

继续学习
||
<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

php入门教程之一周学会PHP

高并发千万级数据库系统解决方案
  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载

答案,不用谢 foreach($arr as $key => $value){ echo $key.'<br />'; foreach($value as $k => $v){ while(list($k1,$v1) = each($v)){ echo $v1

4年前    添加回复 0

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('

4年前    添加回复 0

rock

提示each()函数已弃用…………

5年前    添加回复 0

CL

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'

5年前    添加回复 0

星岚冰释

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('

5年前    添加回复 0

谢单单

经测试,while(list($k,$v) = each($arr) 比 foreach要费时些,所以,不何不直接 用foreach就好了。。。

5年前    添加回复 0

路人

作业: foreach ($arr as $key => $value) { echo '<h1 align="center">' . $key . '</h1>'; foreach ($value as $key2 => $value2) { echo ('<table border=1 width=100%&

5年前    添加回复 0

张桂维

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('

5年前    添加回复 0

至尊宝

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某'

5年前    添加回复 0

¤

while(list($key,$value)=each($arr)){ echo '<h4>'.$key.'</h4>'.'<tr>'; while(list($k,$val)=each($value)){ while(list($kk,$v)=each($val)){ echo $v; } } };

5年前    添加回复 0

¤

foreach($arr as $k => $value){ echo '<h4>'.$k.'</h4>'; foreach($value as $val){ foreach($val as $key => $v){ echo $v; } } }

5年前    添加回复 0

Hélodie Jaqueline

while(list($k,$v)=each($arr)){ echo $k; echo '<table width="600px" border="1px #000">'; while(list($k2,$v2)=each($v)){ echo '<tr>'; whi

6年前    添加回复 0

loerier

foreach($arr as $k => $v1){ echo "<h1>$k</h1>" ; while(list($name,$age,$sex) = each($v1)['value']){ echo "$name --- $age --- $sex </br>"

6年前    添加回复 0

大好山川

while(list($key,$value)=each($arr)){ echo '<h4>'.$key.'</h4>'.'<tr>'; while(list($k,$val)=each($value)){ while(list($kk,$v)=each($val)){ echo '<td>'.$v; }

6年前    添加回复 0

dsyyuer

while(list($key,$value)=each($arr)){echo '<table border=1 width=100%>'."<th colspan=3>{$key}</th>";while(list($k1,$v1)=each($value)){echo '<br/>'."<tr>&quo

6年前    添加回复 0

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~