2011-03-10 103 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