我發現自己使用這個邏輯有很多:php equilvalant重複密鑰更新?
if (isset($array[$key]))
$array[$key] += $num;
else
$array[$key] = $num;
由於密鑰是動態生成的,我不能只是他們都在開始設置爲零。
我想知道是否有更優雅的方式來做到這一點,類似於MySQL的ON DUPLICATE KEY UPDATE
邏輯。
我發現自己使用這個邏輯有很多:php equilvalant重複密鑰更新?
if (isset($array[$key]))
$array[$key] += $num;
else
$array[$key] = $num;
由於密鑰是動態生成的,我不能只是他們都在開始設置爲零。
我想知道是否有更優雅的方式來做到這一點,類似於MySQL的ON DUPLICATE KEY UPDATE
邏輯。
目前不用想,還有真的是更酷的解決方案。也許有些是或多或少可讀
if (!isset($array[$key])) $array[$key] = 0;
$array[$key] += $num
或
$array[$key] = isset($array[$key])
? $array[$key] + $num
: $num;
小更新: 如果設置error_reporting
的值,即不要顯示通知
$array[$key] += $num;
也是可能的,但編寫代碼並不是一個好主意,而是故意引發通知。
懷疑。那麼:我提出了一組新的運算符,例如:'= + =','= - =','=/=','= * =','=。='。涼? – jisaacstone 2011-03-10 22:05:09
不這樣認爲,現有的都可以;)我寧願,如果'$ array ['unknown']'會停止投放通知。無論如何它返回'null',在PHP世界中'null + 14 === 14'。 – KingCrunch 2011-03-10 22:12:38
你是什麼意思你提出一個新的運營商? – ryeguy 2011-03-10 22:15:51
你可以嘗試做一個功能它:
setKey($array, $key, $num);
function setKey(&$array, $key, $num = 1){
$array[$key] = (!isset($array[$key])?setKey($array,$key,$num++):$num;
}
遞歸的,但它應該工作。
據我所見,這是一個無限循環,如果鑰匙存在。遞歸有什麼好處? – KingCrunch 2011-03-10 21:53:53
我修正了這個問題。哎呀 – Neal 2011-03-10 21:55:27
現在它的語法錯誤。你在嘗試什麼?!真的:遞歸有什麼好處? – KingCrunch 2011-03-10 21:56:25
這幾乎是MySQL如何做的。檢查密鑰是否存在,如果不是則執行插入查詢,否則執行更新查詢。 – 2011-03-10 21:48:37