無意間按錯,發現一些快速鍵可以用。
Ctrl + N / P:下一個 / 上一個 channel
Alt + N / P:該 channel 訊息下一頁 / 上一頁
軟體開發、伺服器和生活瑣事
無意間按錯,發現一些快速鍵可以用。
Ctrl + N / P:下一個 / 上一個 channel
Alt + N / P:該 channel 訊息下一頁 / 上一頁
array_merge() 可合併多個陣列,遇到相同的陣列索引,將由後方陣列的值取代前一個值。
如:
$d = array(
'a' => 111,
'b' => 222,
);
$e = array(
'a' => 123,
'c' => 333,
);
var_dump(array_merge($d, $e));
執行結果為:
array(3) {
["a"]=>
int(123)
["b"]=>
int(222)
["c"]=>
int(333)
}
此特性常被用來做設定選項合併,如:
function__construct(array $config){
$defaultsStyle = array(
'display' => true,
'color' => 'red',
'size' => '14px',
);
$settings = array_merge($defaultStyle, $config);
// initialize by $settings
}
上面的寫法可以讓預設的三項索引「display」、「color」、「size」一定存在,不需特別在做 array_key_exists() 檢查,且外部傳入的數值,會將內定的預設值覆蓋掉。
不過只有字串型態的陣列索引,經過 array_merge() 以後可以保留原有的索引名稱,若為數字型態的陣列索引,array_merge() 會將原有索引打掉重新排列。
如:
$d = array(
0 => 111,
1 => 222,
);
$e = array(
9 => 123,
7 => 333,
);
var_dump(array_merge($d, $e));
執行的結果會是:
array(4) {
[0]=>
int(111)
[1]=>
int(222)
[2]=>
int(123)
[3]=>
int(333)
}
另外 array_merge() 有個很奇怪的行為,假設陣列的索引是「類似數字」的字串 (不曉得判斷規則為何),像是 “100”、”200″,經過 array_merge() 時會被當成數字型索引處理。
如:
$d = array(
'100' => 111,
'200' => 222,
);
$e = array(
'100' => 100,
'300' => 333,
);
var_dump(array_merge($d, $e));
執行後為:
array(4) {
[0] =>
int(111)
[1] =>
int(222)
[2] =>
int(100)
[3] =>
int(333)
}
若索引名稱為 “001”、”002″,經過 array_merge() 才會被當成字串,不會有上述情況發生。
要避免索引被吃掉,可以改用 array unioin operator:
$d = array(
'100' => 111,
'200' => 222,
);
$e = array(
'100' => 100,
'300' => 333,
);
var_dump($d + $e));
陣列索引會被保留下來:
array(3) {
[100] =>
int(111)
[200] =>
int(222)
[300] =>
int(333)
}
不過要注意的是,array union operator 遇到相同索引時,陣列值並不會被後方的陣列取代 ($merged[‘100’] 會是 111 而非 100),所以使用時要注意順序問題。
總之,’100’、’200′ 被 array_merge() 當成數字讓我極度不爽。
每次用 autocomplepop 都會覺得右有要移動到方向鍵才能選字實在麻煩。
於是開使加了一些 short keys 讓操作簡單一底,二隻手也可以盡量不宜開主鍵盤區域。
在 .vimrc 中加入 maping,來取帶 arrow 按鍵:
imap <C-J> <Down>
imap <C-K> <Up>
這樣編輯時跳出選字方塊時,變可以使用 Ctrl + J or K 來上下選字。
Post/Redirect/Get (PRG) pattern 是一種處理表單資料的流程,可以防止使用者回上一頁、或是使用重新整理的方式重複送出表單資料。
再拿留言板舉例 (萬年題材 XD),假設在 form.html 填寫完表單,送出到資料到 post.php,而 post.php 處理資料後直接將結果顯示出來 (傳回 HTML),這個時候再瀏覽器按下「重新整理」按鈕,變會看到提示訊息,詢問是否要重送表單內容。
此時若重送表單資料,則會重新送出一模一樣的內容,若 post.php 沒有特別檢查,就會重複處理。很久以前開心農場就是用這種方法洗禮物的。
為了避免瀏覽器可以重新整理頁面,將資料處理的流程稍微做個調整:
post.php 寫法大致如下:
if(saveData($_POST)){
$status = 'ok';
}else{
$status = 'error';
}
header('Location: done.php?status=' . $status);
由於使用 HTTP 3xx 重新導向,瀏覽器不會將 post.php 紀錄到瀏覽紀錄中,按下「上一頁」按鈕也是回到 form.html 而非 post.php,且 done.php 使用 HTTP GET 方式取得內容,所以重新整理頁面也不會重新送出表單內容。此流程按照三個步驟的 HTTP request 方式稱為 Post/Redirect/Get pattern。
PRG pattern 寫起來至少會有三個頁面要實作,也是挺麻煩的。若還要簡單一點的方式,那大概就是改用 AJAX 處理表單了吧。
Reference:
Post/Redirect/Get – Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Post/Redirect/Get
最近手腕舊傷似乎又復發了,距離上一次了大約一年。
去年不明原因手腕腫起來就醫,診斷為肌腱發炎,做了接近一年的復健才康復,而最近又有僵硬、酸痛的症狀發生。
這二次的共通點大致都是工作較忙、打字數較多,最近注意了一下,左手在按組合按鍵時的姿勢特別覺得酸,注意了一下打字的習慣。
平常均使用左手按 Ctrl / Alt / Shift,另外的 key 則是看哪隻手位置比較順。另外也稍微注意一下主要的開發環境,vim 編輯程式時,會用到 Ctrl + w (switch window)、zR / zM (folding)、Ctrl + F (page down) 等,還有一個可能的原因是 PHP 的語法中,所有的變數名稱都是「$」開頭,讓左手的負擔加重。
嘗試了改用右手還按組合鍵,不過習慣難改,工作效率反而一直往下掉。看來就只有晚上多休息,先撐過專案以後,來考慮修改 vim key map,甚至換掉原有的鍵盤排列方式。