我们来研究两个比较有意思的数组函数。这两个函数学起来不难。但是,有些同学会遇到一点点小困难。困难在于,找到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 />';
?>我们来看一下实验结果:

分析结果如图:

结论:
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 />';
?>运行结果:

结论:
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 />'; ?>
运行结果如下图:

总结:
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的结果:

总结:
1.读取了$kongjie中的第一个元素,将第一个元素('gao'=>'穿黑衣服的')分解开了。
1分解后第一个元素变成了一个新数组。
2在新数组里面,将原值(穿黑衣服的)放了索引下标1里面,同时放到了关联下标value里面。
3在新数组里面,将原键(gao),放到了关联下标key里面,放到了索引下标0里面。
我们用图来表示:

这样我们一下子就看明白了。
接下来我们说说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 />'; ?>
执行结果:

总结:
1.读一次向后移动一次【可以想象有一个记录的箭头在移动】,将其中的每个元素拆解成一个新数组
2.读取到最后,没有可操作的元素了,所以返回了false。
list 和each 配合
我们知道了list的特性,也知道了each的特性。那list是不是可以和each配合起来一起来完成一些工作呢?
list($key,$value) = each($array);
我们来看之前说到的这个图:

而list中的第一个变量会去找索引下面0的元素去赋值,第二个变量会找索引下标为1的元素对变量赋值。
我们来看看下面例子:
<?php //定义一个变量叫$kongjie(空姐) $kongjie=[ 'gao'=>'穿黑衣服的', 'shou'=>'腿特别长特别细', 'mei'=>'好白', ]; list($key,$value) = each($kongjie); echo $key. '-----' .$value .'<br />'; ?>
运行结果如下:

总结:
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 />';
}
?>执行演示:

总结:
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','妖人'),
),
);
?>遍历显示出来,效果如下:

":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
":""}
Vince7年前
<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('
张桂维8年前
<?php $arr=array( '教学部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'), ), '宣传部'=>array( array('李某','18','人妖'), array('高某','20','男'), array('张某','21','妖人'
Aniak8年前
while(list($key,$value) = each($arr)){ echo '<table border=1 width=100%>'. "<th colspan=3> {$key} </th>";if (is_array($value))while(list($key2,$value2)=each($value)){ list(
CR8年前
while(list($key, $value) = each($arr)){echo '<table border=1 width=100%>'."<th colspan=3>{$key}</th>";if (is_array($value)) {while(list($key2, $value2) = each($value)){$wor
泡泡8年前
PHP代码:while(list($key,$value)=each($arr)){ echo $key.'<br>'; while(list($k,$v)=each($value)){ list($name,$nl,$xb)=$v; echo $name,$nl,$xb.'<br>'; } }
何松林【好想艾】***8年前
按作用业要求使用list和each配合,做出最终的效果是显示在表格中的。 我一直以为直接用这两个函数就能实现表格的效果? 所以在这一点上怎么也想不明白 看到其它人的评论才知道 题目的意思是:使用list和each配合,使结果在表格中显示出来~~~所以在输出结果时要插入<table></table>.表格代码 唉,我就说,怎么可能只使用list和each 能输出显
丶旧人不复9年前
while(list($key,$value) = each($array)){echo '<table width="800" border="1" style="text-align:left;">'; echo '<caption>';echo $key;echo "</caption>
phpcn_u56519年前
foreach($arr as $key => $vl){ echo '<table width=100% border=1 ><tr><td height=50 colspan=3 align=center> '.$key.'</td></tr>'; foreach($vl as $vv){ echo '&
phpcn_u3899年前
while(list($k,$v)=each($arr)){ echo '<table border=1 width=300>'; echo "<th colspan=3>{$k}</th>"; while(list(,$b)=each($v)){ echo '<tr>';
编程阳4年前
表格形式: while(list($k,$v)=each($arr)){echo ''. " {$k} "; while(list($k1,$v1)=each($v)){echo ''."{$v1[0]}{$v1[1]}{$v1[2]}"; }}
晓菲4年前
可以是这样写:while(list($k,$v) =each($arr)){ echo $k; while (list($k,$v1) =each($v)){ echo ''; echo ''; echo ''.$v1[0];echo ''; echo ''.$v1[1];echo ''; echo ''.$v1[2];echo '';
笔记:while(list($key,$value)=each($arr)) { echo ''; echo ''; echo ''.$key.''; echo ''; foreach($value as $acc) { echo ''; foreach($acc as $key => $value)
笔记:while(list($key,$value)=each($arr)) { echo ''; echo ''; echo ''.$key.''; echo ''; foreach($value as $acc) { echo ''; foreach($acc as $key => $value)
无忧6年前
while( list($k,$v)=each($arr) ){ echo $k.''; while( list($k1,$v1)=each($v) ){ while( list($k2,$v2)=each($v1) ){ echo $v2; } echo ''; } }可用
while(list($key,$value)=each($arr)) { echo ''; echo ''; echo ''.$key.''; echo ''; foreach($value as $acc) { echo ''; foreach($acc as $key => $value) { echo ''.$value.' '.''; } echo ''; } echo ''; echo ''; }
0
!Dante6年前
while(list($key,$value) = each ($arr)){ echo $key.""; foreach($value as $a){ while(list($key,$value) = each($a)){ echo $value.''; } } }
0
音浪不强_不上6年前
while (list($key,$value) = each($arr)){ //$key == 部门 $value == array 所以要再次遍历$value echo ''.$key.''; echo ""; while(list($key1,$value1) = each($value) ){ echo ''; //$key1 == 下标 $value1 == 数组 再次遍历$value1 while(list($key2,$value2) = each($value1)){ //$key2 == 下标 $value2 == 值 echo ''; echo $value2; } echo ''; echo ''; } echo ''; }
0
正6年前
foreach($arr as $key => $value){ echo ''.$key.''; echo ''; foreach($value as $key2 => $value2){ echo ''; foreach($value2 as $key3 => $value3){ echo ''.$value3.''; } echo ''; } echo ''; }
0
hhhh6年前
while (list($key,$value) = each($arr)) { //创建表格 echo ''; //创建th标签 echo ''.$key; //结束th标签 echo ''; while(list($key2,$value2) = each($value)){ //创建tr标签 echo ''; //创建td标签 list($name,$year,$sex) = $value2; echo "".$name." ".$year." ".$sex.""; //结束tr标签 echo ''; } //结束表格 echo ''; }
while (list($key,$value) = each($arr)) { //创建表格 echo ''; //创建th标签 echo ''.$key; //结束th标签 echo ''; while(list($key2,$value2) = each($value)){ //创建tr标签 echo ''; //创建td标签 list($name,$year,$sex) = $value2; echo "".$name." ".$year." ".$sex.""; //结束tr标签 echo ''; } //结束表格 echo ''; }
0
danger6年前
while (list($oneKey, $oneArray) = each($arr)) { echo $oneKey; echo deadline; while (list($twoKey, $twoArray) = each($oneArray)) { list($name, $age, $msg) = $twoArray; echo $name . '--' . $age . '--' . $msg; echo deadline; } }
0
YuShine Wei6年前
list ( mixed $变量1 [, mixed $变量n ] ) 它的功能:将索引数组下标为0的对应我变量1,下标1的对应变量2,依此类推。 array each ( array &$array ) 功能:传入一个数组。它会将其中的一个元素拆为个新数组。每次执行这样操作一个元素。执行一次先后移动一次,同样的方式操作下一个数组元素。执行到最后
0
吒哪6年前
单引号不结释变量,所以输出的是字符串$one
1.list(&key,$value)=each($变量)用来遍历数组 2.ist ( 变量1,变量2, )将索引数组下标为0的对应我变量1,下标1的对应变量2,依此类推。 3.each(数组)函数 array(4) { [1]=> string(15) "穿黑衣服的" ["value"]=> string(15) "穿黑衣服的" [0]=> string(3) "gao" ["key"]=> string(3) "gao" }
0
朱城晨7年前
<?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 "<h2>" . $key . "</h2>"; echo "<table width='500' border='1'>"; while(list($k,$v)=each($value)){ echo '<tr>'; while(list($kk,$vv)=each($v)){ echo '<td>' . $vv . '</td>'; } echo '</tr>'; } echo '</table>'; } ?>
0
旧歌7年前
while(list($key,$value) = each($arr)){ echo $key .'<br />'; foreach($value as $info){ list($name,$old,$sex) = $info; echo $name . '-' .$old .'-'.$sex. '<br />'; } }
0