發表文章

目前顯示的是 3月, 2016的文章

PHP for, foreach時 pass by reference 要注意的地方(超難找的問題)

// 先來看看狀況 $arr = array("a", "b", "c"); foreach ($arr as &$item) {} print_r($arr); foreach ($arr as $item) {} print_r($arr); // output /* Array ( [0] => a [1] => b [2] => c ) Array ( [0] => a [1] => b [2] => b ) */ // 第二次的陣列被改變了 // 原因是因為當這行執行完時 foreach ($arr as &$item) {} // $item 其實是指到$arr[2]的 // 在後來的回圈 foreach ($arr as $item) {} // 這邊的$item指的是$arr[2]的位址 // foreach的時候會不斷的把$arr的每一個值都放到$item中 // 而$item因為上一個傳址呼叫的原因被指定為$arr[2] // 所以第二個回圈只是不停的改變$arr[2] // 解決方法: unset(); $arr = array("a", "b", "c"); foreach ($arr as &$item) {} print_r($arr); unset($item); foreach ($arr as $item) {} print_r($arr); // 結論: 如果使用到 pass by reference(傳址呼叫) // 要記得把那個變數改unset掉, // 不然誤用到那個變數就不好了。

PHP 在php5.2版中沒有__DIR__ 的解決方法

if( !defined( __DIR__ ) )define( __DIR__, dirname(__FILE__) );

PHP CSV直接下載

header("Content-type: text/x-csv"); header("Content-Disposition: attachment; filename=ExampleExportGameRankData.csv"); die("csv內容")

PHP json_decode

json_decode(來源變數, [true/false]); //預設false ->物件型式。true ->陣列型式。