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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM