2011-03-10 155 views
0

我發現自己使用這個邏輯有很多:php equilvalant重複密鑰更新?

if (isset($array[$key])) 
     $array[$key] += $num; 
else 
     $array[$key] = $num; 

由於密鑰是動態生成的,我不能只是他們都在開始設置爲零。

我想知道是否有更優雅的方式來做到這一點,類似於MySQL的ON DUPLICATE KEY UPDATE邏輯。

+0

這幾乎是MySQL如何做的。檢查密鑰是否存在,如果不是則執行插入查詢,否則執行更新查詢。 – 2011-03-10 21:48:37

回答

0

目前不用想,還有真的是更酷的解決方案。也許有些是或多或少可讀

if (!isset($array[$key])) $array[$key] = 0; 
$array[$key] += $num 

$array[$key] = isset($array[$key]) 
      ? $array[$key] + $num 
      : $num; 

小更新: 如果設置error_reporting的值,即不要顯示通知

$array[$key] += $num; 

也是可能的,但編寫代碼並不是一個好主意,而是故意引發通知。

+0

懷疑。那麼:我提出了一組新的運算符,例如:'= + =','= - =','=/=','= * =','=。='。涼? – jisaacstone 2011-03-10 22:05:09

+0

不這樣認爲,現有的都可以;)我寧願,如果'$ array ['unknown']'會停止投放通知。無論如何它返回'null',在PHP世界中'null + 14 === 14'。 – KingCrunch 2011-03-10 22:12:38

+0

你是什麼意思你提出一個新的運營商? – ryeguy 2011-03-10 22:15:51

0

你可以嘗試做一個功能它:

setKey($array, $key, $num); 

function setKey(&$array, $key, $num = 1){ 
    $array[$key] = (!isset($array[$key])?setKey($array,$key,$num++):$num; 
} 

遞歸的,但它應該工作。

+0

據我所見,這是一個無限循環,如果鑰匙存在。遞歸有什麼好處? – KingCrunch 2011-03-10 21:53:53

+0

我修正了這個問題。哎呀 – Neal 2011-03-10 21:55:27

+0

現在它的語法錯誤。你在嘗試什麼?!真的:遞歸有什麼好處? – KingCrunch 2011-03-10 21:56:25