• foreach 使用 引用& $value . 使用 unset($value)


    1.知识点:

     2. 例子

    2.1 例子1 .

     $arr 引用循环, 赋值变量是 &$v ,第一个循环使用后 ,没有 使用unset($v) , 

    $arr2 正常循环, 赋值变量是 $v ,  第二个循环 也 使用 $v 这个变量

     1 <?php
     2 
     3 
     4 $arr = array("a", "b", "c");
     5 $arr2 = array("d", "e", "f");
     6 
     7 foreach($arr as &$v)
     8 {
     9     $v .= 1;
    10 
    11 }
    12 
    13 echo "<pre>";
    14 var_dump($arr);
    15 var_dump($arr2);
    16 
    17 foreach($arr2 as $v)
    18 {
    19     $v .= 2;
    20 }
    21 var_dump($arr);
    22 var_dump($arr2);
    23 
    24  ?>

    注意:红色部分:

    1 .循环 $arr 后 ,  $arr的值 发生变化,   注意最后一个值是 引用.

    2. 第二次循环$arr2;  可以看到 改变的是 $arr的值 ,最后一个值 从 c1 变成了 f2 , 同时 仍然保持着  引用 &string(2)  "f2";

              此时 $arr2 的值没有发生变化.

    2.2 例子2

    $arr1 引用循环 ,  赋值变量是 &$v , 没有 unset($v)

    $arr2正常循环 , 赋值变量是  &v2

     1 <?php
     2 
     3 
     4 $arr = array("a", "b", "c");
     5 $arr2 = array("d", "e", "f");
     6 
     7 foreach($arr as &$v)
     8 {
     9     $v .= 1;
    10 
    11 }
    12 
    13 echo "<pre>";
    14 var_dump($arr);
    15 var_dump($arr2);
    16 
    17 foreach($arr2 as $v2)
    18 {
    19     $v2 .= 2;
    20 }
    21 var_dump($arr);
    22 var_dump($arr2);
    23 
    24  ?>

     

     此时$arr2 循环后 ,  $arr的值没有变化, 但是最后一个值 仍然保持引用, 同时 $arr2 的值 也没有发生变化.

    -----------------------------

    2.3 例子3.

    $arr 引用循环, &$v,   unset($v);

    $arr2 正常循环,  $v

     1 <?php
     2 
     3 
     4 $arr = array("a", "b", "c");
     5 $arr2 = array("d", "e", "f");
     6 
     7 foreach($arr as &$v)
     8 {
     9     $v .= 1;
    10 
    11 }
    12 
    13 echo "<pre>";
    14 var_dump($arr);
    15 var_dump($arr2);
    16 
    17 unset($v);
    18 
    19 var_dump($arr);
    20 var_dump($arr2);
    21 
    22 foreach($arr2 as $v)
    23 {
    24     $v .= '2';
    25 }
    26 var_dump($arr);
    27 var_dump($arr2);
    28 
    29  ?>

     

     第一个红色部分是  $arr 循环后 ,没有 使用  unset($v);

    第二个红色部分 是 $arr 循环后,  使用了 unset($v);

    第三个红色部分 是 $arr2 循环.

    2.4 例子4

    $arr 引用传值,   &$v

    $arr2 正常使用,  $v, 但是 通过函数调用

     1 <?php
     2 
     3 
     4 $arr = array("a", "b", "c");
     5 $arr2 = array("d", "e", "f");
     6 
     7 foreach($arr as &$v)
     8 {
     9     $v .= 1;
    10 
    11 }
    12 
    13 echo "<pre>";
    14 var_dump($arr);
    15 var_dump($arr2);
    16 
    17 function testArr2($array)
    18 {
    19     foreach ($array as $v) {
    20         $v .= 2;
    21     }
    22 
    23     return $array;
    24 }
    25 
    26 var_dump($arr);
    27 var_dump($arr2);
    28 var_dump(testArr2($arr2));
    29 
    30  ?>

     测试 : 两次循环后 $arr 的值 是相同的, 当保持着 引用

    总结:

      使用 &$v之后,  最好使用 unset($v) 删掉 ;

      或者 下一次 循环的时候 不要 使用 $v,  可以使用 $v2, $v3.

      或者 参见 2-4 ,通过函数调用.

    3.使用:

     1     //2: 分析 页面:
     2     public function fxService()
     3     {
     4 
     5         //1: 取出分析
     6         $chart = array();
     7 
     8         $AnalysisModel = new AnalysisModel();
     9         $where["where"] = " isHidden = 0 order by orderBy asc, id asc ";
    10         $data = $AnalysisModel->getDataList($where);
    11 
    12         foreach ($data["rows"] as $k => $model)
    13         {
    14             $cell = array();
    15             $cell["id"] = $model->id;
    16             $cell["chart"] = $model->chart;
    17             $cell["title"] = $model->title;
    18 
    19             $chart[] = $cell;
    20         }
    21 
    22         foreach ($chart as $k => &$v)
    23         {
    24             if ($v["chart"] == 0)
    25             {
    26                 // echo "条形图";
    27                 //条形图:
    28                 $v["content"] = $this->txChartService($v["id"]);
    29             }
    30             else
    31             {
    32                 // echo "雷达图";
    33                 //雷达图:
    34                 $v["content"] = $this->ldChartService($v["id"]);
    35             }
    36 
    37         }
    38 
    39         //去除引用的变量值$v
    40         unset($v);
    41 
    42 
    43         // echo "<pre>";
    44         // var_dump($chart);
    45 
    46 
    47 
    48         //返回数据:
    49         $parameter = array();
    50         $parameter["chart"] = $chart;
    51 
    52         $this->display("Home/iframe/fx.php", $parameter);
    53     }
  • 相关阅读:
    《C程序设计语言》练习1-10
    《C程序设计语言》练习 1-8,1-9
    被这个C程序折腾死了
    《C程序设计语言》练习 1-6,1-7
    利用圆解一元二次方程
    三角插值的 Fourier 系数推导
    利用离散 Fourier 变换解一元二次方程
    关于selenium IDE找不到元素
    【★】深入BGP原理和思想【第一部】
    【★】深入BGP原理和思想【第一部】
  • 原文地址:https://www.cnblogs.com/cbza/p/7451961.html
Copyright © 2020-2023  润新知