2011-03-10 9 views
0

私自身は、このロジックをたくさん使用して見つける:私はちょうど開始時にゼロにそれらすべてを設定することはできません重複したキーの更新では、PHPの平等?

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

キーが動的に生成されるからです。

これは、MySQLのON DUPLICATE KEY UPDATEロジックに似てより洗練された方法があるのだろうかと思っていました。

+0

これは、mysqlのやり方とほぼ同じです。キーが存在するかどうかを確認し、存在しない場合は挿入クエリを実行し、そうでない場合は更新クエリを実行します。 –

答えて

0

現在のところ、は本当にクーラーソリューションがあります。あなたが値にerror_reportingを設定した場合、そのいけないショーの告知

$array[$key] += $num; 

も可能である 、しかし:たぶんいくつかは、多かれ少なかれ読み

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

または

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

リトル更新されています意図的に通知をスローするコードを生成することは非常に良い考えではありません。

+0

はそれほど疑わしいです。それでは:私は '= + ='、 '= - ='、 '=/='、 '= * ='、 '=。='のような新しい演算子を提案します。クール? – jisaacstone

+0

そうは思いません、既存のものは大丈夫です;) '$ array ['unknown']'が通知を投げるのをやめるだけなら、私は好きです。それはとにかく 'null'と' null + 14 === 14'をPHPの世界で返します。 – KingCrunch

+0

新しい演算子を提案してどういう意味ですか? – ryeguy

0

あなたはそれのための機能を作ってみることができます。

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

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

再帰的な、それが動作するはずです。

+0

私が見る限り、鍵が存在する場合、これは無限ループです。再帰は何のために良い? – KingCrunch

+0

私はそれを修正しました。 oops – Neal

+0

これは構文エラーです。あなたは何をしようとしているのですか?そして本当に:再帰は何のために良い? – KingCrunch

関連する問題