從朋友的code看到這樣的寫法:
foreach($_POST as $key => $value) ${$key} = $value;
以前都要這麼寫
$id = $_POST["id"]; $password = $_POST["password"]; ...
用foreach和間接變數索引真是簡單多了,也可以把資料存在陣列,再用foreach輸出,達到data和view分離(延伸說明可查MVC):
// data, 從DB取出使用者資料 $list = array(); $result = db_query("SELECT * FROM `user_data`;"); while($arr = dbl_fetch_assoc($result)) $list[$arr['sn']] = $arr['name']; ... // view, 輸出使用者下拉式選單 <select name="user"> <? foreach($list as $id => $name) echo "<option value=\"$id\">$name"; ?> </select>
ronnywang補充對$_SESSION用這招foreach時,要注意寫回去的設定:
// in the beginning of the code foreach ( $_SESSION as $key => $value ){ ${$key} = $value; $_SESSION[ $key ] = &${key}; // save reference }
比方用到$_SESSION[”permission”],在上面的寫法之後,就能直接對$permission讀寫,如果少了save reference那行,$permission = 3不會把值寫回$_SESSION[”permission”]裡。
另外想到SMF對db query的寫法也滿讚的,將DB field name和value存到陣列裡,再透過implode合成query指令的內文,這種做法很有彈性:
// $regOptions['register_vars']是關聯陣列,key用DB field db_query(" INSERT INTO {$db_prefix}members (" . implode(', ', array_keys($regOptions['register_vars'])) . ") VALUES (" . implode(', ', $regOptions['register_vars']) . ')', __FILE__, __LINE__);
沒有留言:
張貼留言