详解PHP中foreach

10人阅读 评论(0) 收藏 举报

foreach有两种语法:

第一种:遍历给定的 数组语句 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

foreach (array_expression as $value)  

第二种:同上,同时当前单元的键名也会在每次循环中被赋给变量 $key。

foreach (array_expression as $key => $value)

下边我们一一来讲解一下!


一、一维普通数组 与 foreach

我们先写一个一维数组,如下:

$arr = array(
    'Tom',
    'Mary',
    'Peter',
    'Ray',
);

1、我们用第一种foreach方法来输出。

foreach ($arr as $value){
    echo $value."<br>";
}

最后得到的结果是:

Tom
Mary
Peter
Ray


2、我们用第二种 foreach 方法来输出。

foreach ($arr as $key => $value){
    echo $key.','.$value."<br>";
}

最后得到的结果是:

0,Tom
1,Mary
2,Peter
3,Ray


总结: 很明显,我们看到只是多了一个 $key , 而这个 $key 的值就是序号 1、2、3、4 等等!


二、一维关联数组 与 foreach

一维关联数组如下:

$arr = array(
    'a' => 'Tom',
    'b' => 'Mary',
    'c' => 'Peter',
    'd' => 'Ray',
);

1、我们用第一种foreach方法来输出和上边一样。

foreach ($arr as $value){
    echo $value."<br>";
}

最后得到的结果是:

Tom
Mary
Peter

Ray


2、我们用第二种 foreach 方法来输出。

foreach ($arr as $key => $value){
    echo $key.','.$value."<br>";
}

最后得到的结果是:

a,Tom
b,Mary
c,Peter
d,Ray


总结: 很明显,在一维关联数组下, $key就是关联的序号,即相应的a、b、c、d。


三、二维普通数组 与 foreach

遍历二维数组时,稍微麻烦一些,为什么呢?因为遍历出来的value值,是一个数组,既然是数组,那么就可以对数组进行各种操作!

我们先看一个基本的二维数组,如下:

$arr = array(
    array('1','Tom'),
    array('2','Mary'),
    array('3','Peter'),
    array('4','Ray'),
);

1、我们采用第一种 foreach方法:

foreach ($arr as $value){
    print_r($value);
    echo "<br>";
}

得到这样的结果:

Array( [0] => 1 [1] => Tom)
Array( [0] => 2 [1] => Mary)
Array( [0] => 3 [1] => Peter)
Array( [0] => 4 [1] => Ray) 


2、我们采用第二种foreach方法:

foreach ($arr as $key => $value){
    echo '$key='.$key."<br>";
    print_r($value);
    echo "<br>";
}

得到这样的结果:

$key=0
Array( [0] => 1 [1] => Tom)
$key=1
Array( [0] => 2 [1] => Mary)
$key=2
Array( [0] => 3 [1] => Peter)
$key=3
Array( [0] => 4 [1] => Ray) 


总结:由上可知,基本二维数组,$key就是序号 ,如 0、1、2、3 等等!


四、关联二维数组 与 foreach

关联二维数组在实际项目中,用到的可多了。为什么?一般数据库提取出来的数据都是关联二维数组

列出关联二维数组,如下:

$arr = array(
    array('id' => '11','name' => 'Tom'),
    array('id' => '12','name' => 'Mary'),
    array('id' => '13','name' => 'Peter'),
    array('id' => '14','name' => 'Ray'),
);

1、用第一种方法代码:

foreach ($arr as $value){
    print_r($value);
    echo "<br>";
}

得到的结果如下:

Array( [id] => 11 [name] => Tom)
Array( [id] => 12 [name] => Mary)
Array( [id] => 13 [name] => Peter)

Array( [id] => 14 [name] => Ray) 

很明显,关联与不关联的区别就是:不关联前边是 0/1 等等,而关联显示具体名称 id/name 等等。


2、用第二种方法的代码:

foreach ($arr as $key => $value){
    echo '$key'.$key."<br>";
    print_r($value);
    echo "<br>";
}

得到的结果如下:

$key0
Array( [id] => 11 [name] => Tom)
$key1
Array( [id] => 12 [name] => Mary)
$key2
Array( [id] => 13 [name] => Peter)
$key3
Array( [id] => 14 [name] => Ray) 


总结:这里$key仍然是 0、1、2、3 。


五、项目中实战应用

实战:将二维关联数组变为一维普通数组

列出关联二维数组,如下:

$arr = array(
    array('id' => '11','name' => 'Tom'),
    array('id' => '12','name' => 'Mary'),
    array('id' => '13','name' => 'Peter'),
    array('id' => '14','name' => 'Ray'),
);

现在我们只要 name 一列的内容,当然我们可以用以下的方法来实现:

foreach ($arr as $key => $value){
    echo ($value['name']);
    echo "<br>";
}

但有时候我们不得不将之列为一个一维数组,于是我们就有了以下的方法:

$nameArr = array();
foreach ($arr as $key => $value){
    $nameArr[] = $value['name'];
}
print_r($nameArr);

以上通过赋空数组值,foreach 这个空数组等于我们的值,就得到了一个新的数组!以上代码的结果如下:

Array( [0] => Tom [1] => Mary [2] => Peter [3] => Ray)

这个数组明显是:一维普通数组,如下:

$arr = array(
    'Tom',
    'Mary',
    'Peter',
    'Ray',
);
好了,将二维关联数组变为一维普通数组就写到了这里!


查看评论

PHP中的函数-- foreach()的用法详解

PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种...
  • tingliting
  • tingliting
  • 2015-12-09 21:12:42
  • 285

PHP foreach中的引用(&)

今天写项目时,对获取到的一个数组进行了两次遍历操作,第一次遍历时修改了里面的部分数据,第二次遍历将数剧...
  • lkxiaolou
  • lkxiaolou
  • 2014-08-26 22:18:12
  • 1813

PHP中foreach循环详解

首先要说的是,其实我对foreach循环的用法并不是很精通,说详解,其实也只是我自己的理解,希望对你能有点帮助 。 先来看一下foreach的语法: foreach ($array as $k...
  • HUGEHEADHUGE
  • HUGEHEADHUGE
  • 2011-05-23 18:35:00
  • 775

php foreach循环两种类型详解

$myArray=array('sina'=>"新浪",'sohu'=>'搜狐','baidu'=>"百度"); foreach ($myArray as $key => $value) {     ...
  • zhaoyy0513
  • zhaoyy0513
  • 2017-10-25 21:20:42
  • 53

PHP遍历数组的方法汇总——foreach

PHP 循环 在您编写代码时,经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务,而不是在脚本中添加若干几乎相等的代码行。 在 PHP 中,我们有以下循环语句: while - 只要指...
  • qq_15936309
  • qq_15936309
  • 2016-09-07 11:28:57
  • 813

PHP 数组遍历 foreach 语法结构

来源:http://www.cnblogs.com/keta/p/6117237.html foreach 语法结构用于遍历数组。 foreach() PHP for...
  • gb4215287
  • gb4215287
  • 2016-12-11 22:59:39
  • 990

php的foreach循环遍历嵌套html中方法

1.php的foreach循环遍历嵌套html中方法:   $value){ ?>                                                 ...
  • wmc_bk
  • wmc_bk
  • 2017-03-22 13:49:21
  • 5453

PHP foreach嵌套if else的问题

foreach ($illegal_lang as $value){ if(is_numeric(stripos($ua,$value)) == ture){ $ccc = stripos($u...
  • u014796999
  • u014796999
  • 2015-10-31 21:34:35
  • 933

在html中写php的foreach例子

&amp;lt;?php foreach ($data as $k =&amp;gt; $v): ?&amp;gt; &amp;lt;tr class=&quot;tron&q...
  • tglhmily1
  • tglhmily1
  • 2018-03-23 11:56:19
  • 51

php在foreach中使用引用赋值&可能遇到的问题

楼主在写项目的时候,由于初涉PHP的赋值引用操作,觉得这个功能非常强大,用时一时爽,没有深入了解过其中的原理,导致了一些当时觉得不可思议的BUG,废话不都说,我举个例子详细的描述一下这个问题。 代码:...
  • luan111111
  • luan111111
  • 2015-12-28 19:53:02
  • 2576
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 8225
    积分: 1860
    排名: 2万+