zoukankan      html  css  js  c++  java
  • PHP遍历数组元素

    1.什么是遍历

    所谓遍历(Traversal)['trævɜːsəl],是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。 遍历在二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。当然遍历的概念也适合于多元素集合的情况,如数组。

    2.关于PHP的数组遍历

    遍历数组中的所有元素,是PHP常用的一种操作,PHP在遍历数组的过程中,进行数组数据的查询等其它功能。

    3.遍历数组操作

    使用array_walk()函数进行数组的遍历操作,非常简单。

    一个例子:

     1 $items=array(
     2 "化肥"=> "硫酸铵",
     3 "农药制剂"=>"毒死蜱",
     4 "农药原药"=>"多效唑原药"
     5 );//这是一个一维数组
     6 
     7 function walk($my_array,$key_name){
     8     if($my_array=="硫酸铵")
     9     $my_array="$my_array:此产品已无货";
    10     echo "【产品类别为:$key_name"."】"."$my_array<br />";
    11     }//自定义一个函数walk。
    12 array_walk($items,"walk");

    这段代码,可以用于输出库存中,无货的商品。例如农化仓库内含有硫酸铵、毒死蜱、多效唑原药等商品,库管要求将他发现的一个商品标记为“无货”,那么库管将产品名称告诉操作员,操作员则将产品名称输入walk函数中,由$my_array变量去数组中通过遍历的形式查找某个商品。

    最终输出了缺货产品的列表:

    【产品类别为:化肥】硫酸铵:此产品已无货
    【产品类别为:农药制剂】毒死蜱
    【产品类别为:农药原药】多效唑原药

    array_walk()函数,可以对数组中每一个数据进行遍历,如果数组中,不同键的值相同,那么输出后,是什么情况呢?

    例子:

     1 $items=array(
     2 "化肥"=> "硫酸铵",
     3 "农药制剂"=>"毒死蜱",
     4 "农药原药A类"=>"多效唑原药",
     5 "农药原药B类"=>"多效唑原药"
     6 );//这是一个一维数组
     7 
     8 function walk($my_array,$key_name){
     9     if($my_array=="多效唑原药")
    10     $my_array="$my_array:此产品已无货";
    11     echo "【产品类别为:$key_name"."】"."$my_array<br />";
    12     }//自定义一个函数walk。
    13 array_walk($items,"walk");

    例子中,“农药原药A类”与“农药原药B类”的值是相同的,那么如果$my_array的变量等于这个值的话,输出为:

    【产品类别为:化肥】硫酸铵
    【产品类别为:农药制剂】毒死蜱
    【产品类别为:农药原药A类】多效唑原药:此产品已无货
    【产品类别为:农药原药B类】多效唑原药:此产品已无货

    可见,如果不同的键的值相同,那么array_walk函数在遍历数组时,也会将各个值进行查找与标记。数组的遍历,是对数组每一个元素进行遍历,与数组的值是否相同无关。

    4.在遍历数组的过程中,改变数组数据的值

    使用array_walk函数与自定义函数对数组元素进行遍历的过程中,是可以改变数组元素的值的。

    在改变数组元素值的时候,只需要使用“引用传递”符号——“&”即可。

    一个例子:

     1 $items=array(
     2 "化肥"=> "硫酸铵",
     3 "农药制剂"=>"毒死蜱",
     4 "农药原药A类"=>"多效唑原药",
     5 "农药原药B类"=>"多效唑原药"
     6 );//这是一个一维数组
     7 
     8 function walk($my_array,$key_name){
     9     if($my_array=="多效唑原药")
    10     $my_array="$my_array:此产品已无货";
    11     echo "【产品类别为:$key_name"."】"."$my_array<br />";
    12     }//自定义一个函数walk。
    13 array_walk($items,"walk");
    14 print_r($items);

    在没有对  $my_array="$my_array:此产品已无货";  这个变量进行引用传递的情况下,数组正常输出:

    【产品类别为:化肥】硫酸铵
    【产品类别为:农药制剂】毒死蜱
    【产品类别为:农药原药A类】多效唑原药:此产品已无货
    【产品类别为:农药原药B类】多效唑原药:此产品已无货

    Array ( [化肥] => 硫酸铵 [农药制剂] => 毒死蜱 [农药原药A类] => 多效唑原药 [农药原药B类] => 多效唑原药 )

    从输出结果中,可以看到,“农药原药A类”与“农药原药B类”的值与数组初始值是一样的。

    下面对$my_array变量进行引用传递赋值:

     1 $items=array(
     2 "化肥"=> "硫酸铵",
     3 "农药制剂"=>"毒死蜱",
     4 "农药原药A类"=>"多效唑原药",
     5 "农药原药B类"=>"多效唑原药"
     6 );//这是一个一维数组
     7 
     8 function walk(&$my_array,$key_name){
     9     if($my_array=="多效唑原药")
    10     $my_array="$my_array:此产品已无货";
    11     echo "【产品类别为:$key_name"."】"."$my_array<br />";
    12     }//自定义一个函数walk。
    13 array_walk($items,"walk");
    14 print_r($items);

    输出:

    【产品类别为:化肥】硫酸铵
    【产品类别为:农药制剂】毒死蜱
    【产品类别为:农药原药A类】多效唑原药:此产品已无货
    【产品类别为:农药原药B类】多效唑原药:此产品已无货
    Array ( [化肥] => 硫酸铵 [农药制剂] => 毒死蜱 [农药原药A类] => 多效唑原药:此产品已无货 [农药原药B类] => 多效唑原药:此产品已无货 )

    可以看到, 经过array_walk函数遍历的数组的值,已经发生了改变。

    5.关于“引用赋值”:

    引用赋值是 &=

    引用赋值:将“&=”左右两个变量变成同一个变量,并且这两个变量都是在同一个内存地址中。

    例子:

    1 $val1="hello";
    2 $val2=&$val1;
    3 echo $val1."这是变量1"."<br />";
    4 echo $val2."这是变量2"."<br />";

    输出:

    hello这是变量1
    hello这是变量2

  • 相关阅读:
    ES自身支持容灾异地容灾么?生产环境如何实施?
    Redis集群详解
    原生js实现jquery的ajax
    用原生js实现jquery的一些方法
    原生javascript的一些常用方法
    原生javascript
    理解和熟练运用call和apply
    做项目过程中的css reset
    深入理解javascript编程中的同步和异步
    history.back(-1)和history.go(-1)的区别
  • 原文地址:https://www.cnblogs.com/4php/p/2700372.html
Copyright © 2011-2022 走看看