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

  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载
大学生de小铺子

大学生de小铺子

作业还是有点难度的,得稍微动脑经想一下哟

3年前    添加回复 0

回复
SAI

SAI

while(list($key,$value) = each($arr)){ echo $key,'<br />'; while(list($k,$v) = each($value)){ echo '<table width="100%" border="1"><tr>' ;

4年前    添加回复 0

回复
SAI

SAI

while(list($key,$value) = each($arr)){ echo $key,'<br />'; while(list($k,$v) = each($value)){ echo '<tableborder="1"><tr>' ; while(list

4年前    添加回复 0

回复
[鸡]彬彬爹地[鸡]

[鸡]彬彬爹地[鸡]

这个评论300个字太少了,作业都上传不了

4年前    添加回复 0

回复
小肉丸、

小肉丸、

while (list($a,$b)=each($arr)) { echo "<h3 style=\"text-align:left;\">$a</h3>"; while (list($c,$d)=each($b)) { while (list($e,$f)=each($d)) { echo &qu

4年前    添加回复 0

回复
张康佳

张康佳

while(list($i,$j) = each($arr)){ echo $i; while(list($a,$b) = each($j)){ // echo $b; while(list($c,$val) = each($b)){ echo $c; echo $val;

4年前    添加回复 0

回复
phpcn_u406

phpcn_u406

怎么代码发不全?

4年前    添加回复 0

回复
phpcn_u406

phpcn_u406

while(list($k,$v) = each($arr)){ echo "<h1>".$k."</h1>"; while(list($k1,$v1)=each($v)){ echo "<br/>"; while(list($k2,$v2)=each($v1

4年前    添加回复 0

回复
phpcn_u406

phpcn_u406

while(list($k,$v) = each($arr)){ echo "<h1>".$k."</h1>"; while(list($k1,$v1)=each($v)){ echo "<br/>"; while(list($k2,$v2)=each($v1)

4年前    添加回复 0

回复
phpcn_u406

phpcn_u406

while(list($k,$v) = each($arr)){ echo "<h1>".$k."</h1>"; while(list($k1,$v1)=each($v)){ echo "<br/>"; while(list($k2,$v2)=each($v1)

4年前    添加回复 0

回复
phpcn_u389

phpcn_u389

回复295个字被截称隔着个样子了

4年前    添加回复 0

回复
3期-Shawn

3期-Shawn

我们来看看下面例子: <?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一样的效果。

3年前 1

3期-Shawn

3期-Shawn

我们用图来表示: 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。

3年前 0

意塑

意塑

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); while(list($key,$value)=each($arr)){ echo "<p style='width:200px;text-align:center;'>".$key."</p>"; echo "<table border=1 style='width:200px;text-align:center;'>"; while(list($k,$val)=each($value)){ echo "<tr>"; while(list($k,$v)=each($val)){ echo "<td>".$v."</td>"; } echo "</tr>"; } echo "</table>"; } ?>

3年前 0

′─*Ab君

′─*Ab君

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); while (list($bm,$value)=each($arr)) { echo '<table border="1" align="center" width="600">'; echo '<caption><h2>' . $bm . '</h2></caption>'; while(list($k,$value1)=each($value)) { echo '<tr>'; while(list($k1,$value2)=each($value1)) { echo '<td>' . $value2 . '</td>'; } echo '</tr>'; } echo '</table>'; } ?>

3年前 0

沐桔

沐桔

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); while (list($bm,$value)=each($arr)) { echo '<table border="1" align="center" width="600">'; echo '<caption><h2>' . $bm . '</h2></caption>'; while(list($k,$value1)=each($value)) { echo '<tr>'; while(list($k1,$value2)=each($value1)) { echo '<th>' . $value2 . '</th>'; } echo '</tr>'; } echo '</table>'; } ?>

3年前 0

至尊宝

至尊宝

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); while(list($key,$value)=each($arr)){ echo '<table border="1" width="400px">'; echo '<caption><h2>'.$key .'</h2></caption>'; while(list($ke,$va)=each($value)){ echo '<tr>'; while(list($k,$v)=each($va)){ echo '<td>'.$v.'</td>'; } echo '</tr>'; } echo '</table>'; } ?>

3年前 0

徊憶~嗳

徊憶~嗳

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); while(list($key,$value)=each($arr)){ echo "<h1>".$key."</h1>"; while(list($key1,$value1)=each($value)){ echo "<table border='1' width='200px' cellspacing='0'>"."<tr width='30px'>"; while(list($key2,$value2)=each($value1)){ echo "<td width='30px'>".$value2."</td>"; } echo "</tr>"."</table>"; } } ?>

3年前 0

一一

一一

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); while(list($k,$v) = each($arr)){ echo "<h3 style='text-align:center;'>".$k."</h3>"; echo '<table width=100% border=1 >'; while(list($k2,$v2)=each($v)){ echo '<tr>'; while(list($k3,$v3)=each($v2)){ echo '<td>'.$v3.'</td>'; } echo '<tr>'; } echo '</table>'; }; ?>

3年前 0

大白兔

大白兔

<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); foreach ($arr as $key => $value){ echo $key ."<br />"; foreach($value as $key => $value){ list($key,$value) = each($value); echo $key.'-----'.$value.'<br />'; } echo '<br />'; } ?>

3年前 0

博龙

博龙

数组下标0的元素赋值给list函数的第一个变量,下标1的元素赋值给list函数第二个变量,如此类推.数组中的关联元素(要索引元素才能可能)不会赋值给list函数的变量.一一对应

3年前 0

李伟华

李伟华

header("content-type:text/html;charset=utf-8"); $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); for($i = 0 ;$i<count($arr);$i++){ list($k,$v) = each($arr); echo "<table border = 1px>"; $string = "<hi>$k</hi>"; echo $string; foreach($v as $key =>$value){ echo "<tr>"; foreach($value as $key2 =>$value2){ echo "<td>" ."$value2"."</td>"; } echo "</tr>"; } echo "</table>"; }

3年前 0

Felix

Felix

while (list($key,$value)=each($arr)) { $a = $key; $b = $value; echo '<h1 align="center">'.$a.'</h1>'; echo '<table align="center" width="800" border="1">'; while (list($key,$value)=each($b)) { $c = $value; echo '<tr bgcolor="pink">'; while (list($key,$value)=each($c)){ $d = $value; echo '<th>'.$d. '<th/>'; } echo '<tr/>'; } echo "<table>"; }

3年前 0

折印

折印

<?php //for循环遍历数组,不知道如何添加名称。233 $arr=array( array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); for($i=0;$i<count($arr);$i++){ echo '<table border="1" align="center" width="600">'; echo '<tr bgcolor="red"><th>姓名</th><th>年龄</th><th>性别</th></tr>'; for($row=0;$row<count($arr[$i]);$row++){ echo '<tr>'; for($col=0;$col<count($arr[$i][$row]);$col++){ echo '<td>'.$arr[$i][$row][$col].'</td>'; } echo '</tr>'; } echo '</table>'; } ?>

3年前 0

折印

折印

<?php //list each $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '财务部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), ); while(list($key,$value)=each($arr)){ echo '<table border="1" width="600" align="center">'; echo '<caption><h2>'.$key.'</h2></caption>'; echo '<tr bgcolor="yellow"><th>姓名</th><th>年龄</th><th>性别</th></tr>'; while(list($key1,$value1)=each($value)){ echo '<tr>'; while(list($key3,$value2)=each($value1)){ echo '<td>'.$value2.'</td>'; } echo '</tr>'; } echo '</table>'; } ?>

3年前 0

折印

折印

下面是用foreach

3年前 0

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