我发现自己使用这个逻辑有很多: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