PHP数组循环遍历的四种方式

【(重点)数组循环遍历的四种方式】

 

 1、使用for循环遍历数组
     conut($arr);用于统计数组元素的个数。
     for循环只能用于遍历,纯索引数组!!!!
     如果存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,导致数组越界!!
 eg:
   $arr = array(1,2,3,5,6,7);
   $num = count($arr);        //count最好放到for外面,可以让函数只执行一次 count统计数组中元素的个数。
   echo "数组元素的个数{$num}
"; //注意这里典型的双引号内用花括号包裹变量

   for($i=0;$i<$num;$i++){
  echo "{$i}==>{$arr[$i]}
";  //注意php中双引号内使用花括号包裹变量的写法

 }
 
  2、forEach循环遍历数组
     foreach可以遍历任何类型的数组!!!
 eg:

 

复制代码

 $arr = array(1,2,3,"one"=>4,5,6,7);
   foreach($arr as $value){
  echo "{$value}
"; } foreach($arr as $key => $value){ echo "{$key}==>{$value}
"; }

复制代码

 


   举个例子解析如下数组:

 

复制代码

$h51701 = array(
  "group1"=>array(
   array("name"=>"张三","age"=>14,"sex"=>"男"),
   array("name"=>"张三","age"=>14,"sex"=>"男"),
   array("name"=>"张三","age"=>14,"sex"=>"男")
  ),
  "group2"=>array(
   array("name"=>"张三","age"=>14,"sex"=>"男"),
   array("name"=>"张三","age"=>14,"sex"=>"男"),
   array("name"=>"张三","age"=>14,"sex"=>"男")
  ),
  "group3"=>array(
   array("name"=>"张三","age"=>14,"sex"=>"男"),
   array("name"=>"张三","age"=>14,"sex"=>"男"),
   array("name"=>"张三","age"=>14,"sex"=>"男")
  )
 );


 foreach ($h51701 as $key => $value) {
  echo "{$key}

"; foreach ($value as $key1 => $value1) { echo "第".($key1+1)."个同学
"; foreach ($value1 as $key2 => $value2) { echo "{$key2}==>{$value2}
"; } echo "
"; } echo "------------------------
"; }

复制代码

 


   使用list()、each()、while()遍历数组
   (重点)list():用于将数组的每一个值,赋值给list函数的每一个参数。(list函数的参数,必须小于等于数组的元素个数);
   eg:list($a,$b,$c)=[1,2,3];-->$a=1; $b=2; $c=3;
   注意:① list()在解析数组时,只解析索引数组;
        ② list可以通过空参数,选择性的解析数组的值;
          list($a,,$b)=[1,2,3];-->$a=1;  $b=3;
   (重点)each():用于返回数组当前指针所在位的键值对!并将指针后移一位;
       返回值:如果指针有下一位,返回一个数组。包含一个索引数组(0-键,1-值)和一个关联数组("key"-键,"value"-值);如果指针没有下一位,返回false;         
   eg: 
    ① each($arr) 返回数组或false;
    ② 把数组或false赋值给$a;
    ③ while判断$a如果是数组,继续执行下一次;
             如果$a是false,终止循环
  while($a = each($arr)){
  echo "{$a[0]}-->{$a[1]}
";  

  echo "{$a['key']}-->{$a['value']}
";  

  } 
   3.使用list()/each()/while()配合遍历数组

 while(list($key,$value) = each($arr)){
   echo "{$key}-->{$value}
"; } reset($arr);

     !!!!数组使用each()遍历完一遍后,指针使用处于最后一位的下一位;即再用each(),始终返回false;
     如果还需使用,需用reset($arr);函数,重置数组指针;
  eg:

复制代码

 

 $arr = array(1,2,3,"one"=>4,5,6,7);
   foreach($arr as $value){
  echo "{$item}
"; } foreach($arr as $key => $value){ echo "{$key}==>{$item}
"; }

复制代码

 

 

 

复制代码

 while(true){
   $a = each($arr);
  if($a){
   echo "{$a[0]}-->{$a[1]}
"; echo "{$a['key']}-->{$a['value']}
"; }else{ break; } }

复制代码

 

 

 

复制代码

 while(list($key,$value) = each($arr)){
  echo "{$key}-->{$value}
"; } reset($arr); while(list($key,$value) = each($arr)){ echo "{$key}-->{$value}
"; }

复制代码

 


  4、 使用数组指针遍历数组
   ① next:将数组指针,后移一位。并返回后一位的值;没有返回false
   ② prev:将数组指针,前移一位。并返回前一位的值;没有返回false
   ③ end:  将数组指针,移至最后一位,返回最后一位的值;空数组返回false
   ④ reset:将数组指针,恢复到第一位。并返回第一位的值;空数组返回false
   ⑤ key: 返回当前指针所在位的键;
   ⑥ current:返回当前指针所在位的值;

 

复制代码

$arr = [1,2,3,4,"one"=>5];
  while(true){
   echo key($arr);
   echo "--";
   echo current($arr);
  echo "
"; if(!next($arr)){ break; } } reset($arr); //第二种方式:
do{
   echo key($arr);
   echo "--";
   echo current($arr);
  echo "
"; }while(next($arr)); reset($arr);
 

复制代码

 

  牛刀小试:
   1.遍历数组:$subject1 = array("Linux","PHP","MySQL","HTML","CSS","JQuery")
  方式一:for循环遍历

for($i=0;$i";
   }

  方式二:使用list()/each()/while()配合遍历数组

复制代码

 

 方式一.
 while(list($key,$value)=each($subject1)){
  echo "{$key}-->{$value}
"; }  方式二. while($a=each($subject1)){   echo $a[0]."=>".$a[1]."
";        }

 

复制代码

方式三:forEach循环遍历

foreach ($subject1 as $key => $value) {
   echo "{$key}-->{$value}
"; }

 方式四:指针

 do{
   echo   key($subject1)."=>".current($subject1)."
";   }while(next($subject1));   echo "
";

2.使用reset(),end(),prev(),next(),key(),current();与do…while组合倒着输出数组中的值:
  $subject2 = array(“Linux”,”PHP”,”MySQL”,”HTML”,”CSS”,”JQuery”)

 $subject2 = array("Linux","PHP","MySQL","HTML","CSS","JQuery");
    end($subject2);
   do{
   echo key($subject2)."=>".current($subject2)."
"; }while(prev($subject2));

 

 

 

 

PHP常用的遍历方法有三种,foreach,for,list()/each()和while,这三种方法中效率最高的是使用foreach语句遍历数组

一、使用for语句循环遍历数组

  值得大家注意的是使用for语句循环遍历数组要求遍历的数组必须是索引数组(即通常情况下所说的数组)。PHP中不仅有关联数组而且还有索引数组,所以PHP中很少用for语句循环遍历数组。 

复制代码

'; 
} 
?>

复制代码

 

输出:

 

PHP的几种遍历方法


PHP教程

  上例代码中我们先计算出数组$arr中元素的个数,然后才使用在for语句,这样做很高效的。因为如果是for($i=0;$i< count($arr);++$i)的话,每次循环都会计算数组$arr中元素的个数,而使用上面的方式可以减去这种开销。使用++$i也是为了提高效率。

二、使用foreach语句遍历数组

使用foreach语句循环遍历数组有二种方式,我们使用的最多的还是第一种方式。介绍如下:

①foreach(array_expression as $value){
//循环体
}

复制代码

'; 
} 
?>

复制代码

每次循环中,当前元素的值被赋给变量$value,并且把数组内部的指针向后移动一步。所以下一次循环中会得到数组的下一个元素,直到数组的结尾才停止循环,结束数组的遍历。

②foreach(array_expression as  $key=>$value){
//循环体
}

复制代码

$v){ 
echo $k."=>".$v."
"; } ?>

复制代码

三、联合使用list()、each()和while循环遍历数组
each()函数需要传递一个数组作为一个参数,返回数组中当前元素的键/值对,并向后移动数组指针到下一个元素的位置。 list()函数,这不是一个真正的函数,是PHP的一个语言结构。list()用一步操作给一组变量进行赋值。

复制代码

'.$v.'
'; } ?>

复制代码

 

 

PHP数组遍历的五种方法

 

 

for
对于纯数字索引的数组可以通过for循环来遍历数组,但是要注意的是数字索引必须是连续的,否则会获取不到数组中的部分数据。遍历不受数组内部指针影响。

"a","2"=>"c","d");
$len=count($ar1);
for($i=0;$i<$len;$i++){
    echo $ar1[$i]."\n";
}
?>


foreach
foreach可以遍历任何类型的数组,可以只遍历值,也可以同时遍历键和值。遍历不受数组内部指针影响。

"a","2"=>"c","d");
foreach($ar1 as $k=>$v){
    echo "$k=>$v\n";
}
foreach($ar2 as $k =>$v){
    echo "$k=>$v\n";
}
foreach ($ar2 as $v) {
    echo "$v\n";
}
?>


while/do...while、each
each函数以数组形式返回数组中当前的键/值对并将数组指针向前移动一步,each函数在PHP7.2后被移除。如果想要再次从头遍历需要重置数组内部指针。

".$kv[1].",".$kv['key']."=>".$kv['value']."\n";
}
?>


while/do...while、list、each
通过list函数接受each返回的数组键/值对。如果想要再次从头遍历需要重置数组内部指针。

$v\n";  
}
?>


while/do..while、key、next/prev、current
通过数组的next、prev等可操作数组内部指针的函数进行遍历。

"a",1=>"b",false=>"c",3=>false,"d",null=>false,"f");
while(key($ar3)!==null){
    echo key($ar3)."=>".current($ar3)."\n";
    next($ar3);
}
?>
 


 

 

你可能感兴趣的:(PHP)