您的位置:首页 > 职场人生

Android程序员学PHP开发(21)-使用foreach、list、while、each遍历数组-PhpStorm

2017-02-13 15:40 866 查看
转载请注明出处:http://blog.csdn.net/iwanghang/
觉得博文有用,请点赞,请评论,请关注,谢谢!~

foreach:

数组的遍历方法有很多,在其他语言里,下标连续的数组一般使用for来进行遍历,但是基于php数组的特殊性,我们一般使用foreach,有时候也使用each。
首先我们来看一下,大部分语言中的数组:$arr = array("a", "b", "c", "d", "e", "f", "g");
然后我们来看一下,PHP中可以存在的数组形式:$arr2 = array("a", "b", 100=>"c", "d", "xxx"=>"e", "f", "g");
是的,arr2无法使用for便进行遍历~~所以,有了强大的foreach方式~~
foreach有2种表达式:
1、foreach(数组 as 自定义变量)
2、foreach(数组 as 下标变量 => 值变量)

list:

list() 在一次操作中给一组变量赋值。注意,list只能将连续索引的数组转化为变量。

我个人觉得list没有任何优势,除了在配合explode函数的时候。explode() 把字符串打散为数组。
在下面的代码中,演示了一个例子:list($name, $web) = explode("_",$str);

each:

each() 返回当前元素的键名和键值,并将内部指针向前移动。
current() - 返回数组中的当前元素的值出。
end() - 将内部指针指向数组中的最后一个元素,并输出。
next() - 将内部指针指向数组中的下一个元素,并输出。
prev() - 将内部指针指向数组中的上一个元素,并输出。
reset() - 将内部指针指向数组中的第一个元素,并输出。
配合while使用,就可以进行数组的遍历: while ($tmp = each($arr)){ print_r($tmp); echo '<br>'; }

<?php
/**
* 遍历数组
* for只可以遍历$arr这样下标连续的数组
* foreach可以遍历$arr、$arr2等任何类型的数组
* foreach的2种用法:
* 1、foreach(数组 as 自定义变量)
* 2、foreach(数组 as 下标变量 => 值变量)
*/
$arr = array("a", "b", "c", "d", "e", "f", "g");
$arr2 = array("a", "b", 100=>"c", "d", "xxx"=>"e", "f", "g");
$group = array(
array("name"=>"iwanghang", "age"=>18, "sex"=>"男", "email"=>"iwanghang@qq.com"), // $group[0]
array("name"=>"queen", "age"=>14, "sex"=>"女", "email"=>"queen@qq.com"), // $group[1]
array("name"=>"king", "age"=>55, "sex"=>"男", "email"=>"king@qq.com"), // $group[2]
);

echo '---------- 使用for遍历数组 ----------<br>';
for ($i=0; $i<count($arr); $i++){
echo $arr[$i].'<br>';
}
/* 打印结果:
a
b
c
d
e
f
g
*/

echo '---------- 使用foreach遍历数组 ----------<br>';
foreach ($arr2 as $value){
echo $value.'<br>';
}
/* 打印结果:
a
b
c
d
e
f
g
*/

echo '---------- 使用foreach遍历数组 2 ----------<br>';
foreach ($arr2 as $bb => $vv){
echo $bb.'-----'.$vv.'<br>';
}
/* 打印结果:
0-----a
1-----b
100-----c
101-----d
xxx-----e
102-----f
103-----g
*/

echo '---------- 打印二位数组 ----------<br>';
echo '<pre>';
print_r($group);
echo '</pre>';
/* 打印结果:
Array
(
[0] => Array
(
[name] => iwanghang
[age] => 18
[sex] => 男
[email] => iwanghang@qq.com
)

[1] => Array
(
[name] => queen
[age] => 14
[sex] => 女
[email] => queen@qq.com
)

[2] => Array
(
[name] => king
[age] => 55
[sex] => 男
[email] => king@qq.com
)

)
*/

echo '<table border="1" width="800" align="center">';
echo '<caption><h1>数组转换为表格</h1></caption>';

foreach ($group as $kk => $row){
echo '<tr>';
if (is_array($row)) {
foreach ($row as $col) {
echo '<td>' . $col . '</td>';
}
}else{
echo '<td colspan="4"'.$kk.':'.$row.'</td>';
}
echo '</tr>';
}
echo '</table>';

/**
* list() 在一次操作中给一组变量赋值。
* 注意,list只能将连续索引的数组转化为变量
*
* explode() 把字符串打散为数组。
*/
echo '---------- 使用list遍历数组 ----------<br>';
list($a, $b, $c) = array("郭靖", "黄蓉", "洪七公");
echo $a."<br>"; // 打印结果:郭靖
echo $b."<br>"; // 打印结果:黄蓉
echo $c."<br>"; // 打印结果:洪七公

echo '---------- 使用list遍历数组 2 ----------<br>';
list($aa, $bb, $cc) = array("郭靖", "two"=>"黄蓉", "洪七公");
echo $aa."<br>"; // 打印结果:郭靖
echo $bb."<br>"; // 会报错,因为索引不是连续数组
echo $cc."<br>"; // 打印结果:洪七公

echo '---------- 使用list遍历数组 3 ----------<br>';
$str="iwanghang_CSDN";
list($name, $web) = explode("_",$str);
echo $name."<br>"; // 打印结果:iwanghang
echo $web."<br>"; // 打印结果:CSDN

/**
* each() 返回当前元素的键名和键值,并将内部指针向前移动。
*
* 相关的方法:
* current() - 返回数组中的当前元素的值
* end() - 将内部指针指向数组中的最后一个元素,并输出
* next() - 将内部指针指向数组中的下一个元素,并输出
* prev() - 将内部指针指向数组中的上一个元素,并输出
* reset() - 将内部指针指向数组中的第一个元素,并输出
*/
echo '---------- 使用each遍历数组 ----------<br>';
$arr3 = ["男主角"=>"郭靖", "黄蓉", "洪七公"];
$people = each($arr3);
echo '<pre>';
print_r($people);
echo '</pre>';
/*
* 打印结果:
Array
(
[1] => 郭靖
[value] => 郭靖
[0] => 0
[key] => 0
)
*/
$people = each($arr3);
print_r($people); // 打印结果:Array ( [1] => 黄蓉 [value] => 黄蓉 [0] => 1 [key] => 1 )
echo "<br>";
$people = each($arr3);
print_r($people); // 打印结果:Array ( [1] => 洪七公 [value] => 洪七公 [0] => 2 [key] => 2 )
echo "<br>";
$people = each($arr3);
print_r($people); // 打印结果:为空
echo "<br>";

/**
*
*/
echo '---------- 使用while配合each遍历数组 ----------<br>';
$arr4 = ["男主角"=>"郭靖", "黄蓉", "洪七公", "老顽童", "黄药师"];
while ($tmp = each($arr4)){
print_r($tmp);
echo '<br>';
}
/*
* 打印结果:
Array ( [1] => 郭靖 [value] => 郭靖 [0] => 男主角 [key] => 男主角 )
Array ( [1] => 黄蓉 [value] => 黄蓉 [0] => 0 [key] => 0 )
Array ( [1] => 洪七公 [value] => 洪七公 [0] => 1 [key] => 1 )
Array ( [1] => 老顽童 [value] => 老顽童 [0] => 2 [key] => 2 )
Array ( [1] => 黄药师 [value] => 黄药师 [0] => 3 [key] => 3 )
*/

echo '---------- 使用while配合each遍历数组 2 ----------<br>';
$arr5 = ["男主角"=>"郭靖", "黄蓉", "洪七公", "老顽童", "黄药师"];
while ($tmp = each($arr5)){
//echo "{$tmp['key']}=>{$tmp['value']}";
echo "{$tmp[0]}=>{$tmp[1]}"; // echo "{$tmp['key']}=>{$tmp['value']}"; 相同
echo '<br>';
}
/*
* 打印结果:
男主角=>郭靖
0=>黄蓉
1=>洪七公
2=>老顽童
3=>黄药师
*/

/**
*
*/
$arr6 = ["one"=>"郭靖", "two"=>"黄蓉", "three"=>"洪七公", "four"=>"老顽童", "five"=>"黄药师"];
echo "当前的位置(默认在第一个):".key($arr6)."=>".current($arr6)."<br>"; // 当前的位置(默认在第一个):one=>郭靖
next($arr6);
next($arr6);
next($arr6);
echo "当前的位置:".key($arr6)."=>".current($arr6)."<br>"; // 当前的位置:four=>老顽童
end($arr6);
echo "当前的位置:".key($arr6)."=>".current($arr6)."<br>"; // 当前的位置:five=>黄药师
prev($arr6);
prev($arr6);
echo "当前的位置:".key($arr6)."=>".current($arr6)."<br>"; // 当前的位置:three=>洪七公
reset($arr6);
echo "当前的位置:".key($arr6)."=>".current($arr6)."<br>"; // 当前的位置:one=>郭靖

转载请注明出处:http://blog.csdn.net/iwanghang/

欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式



微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com



觉得博文有用,请点赞,请评论,请关注,谢谢!~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP PhpStorm foreach list each