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     }