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 }