1

これを明確に説明するのは少し難しいですが、PHP では次のように言えます。

$myArray['someindex'] = "my string";

その名前のインデックスがない場合は、値を作成/割り当てます。インデックスがある場合は、既存の値を上書きします。

これを、今日私が次のようなチェックをしなければならなかった Javascript と比較してください。

if (!myObject[key]) myObject[key] = "value";

これは少し厄介な点かもしれませんが、PHP (および他の多くの言語) がこれらのチェックを独自に行う機能の名前はありますか?

編集

私はこれを尋ねて混乱しました。この構造に追加したいとしましょう:

myobject = {
    holidays : {easter : {date : 4/20/2010,
                          religion : Christianity}
                holi : {date : 3/10/2010,
                        religion : hindu} 
}

今日、表形式のデータを受け取ったときに問題が発生し、オブジェクトを作成して、このようなツリーに入れたいと思いました。

ループを開始したときmyobject['holidays'][thisVariable][date] = 4/20/2010、ツリーがその時点までほとんど構築されていないかのように、新しいインデックスを作成するのに苦労しました。

これが明確でない場合は、他のコンピューターからコード サンプルを取得します。考えが浅くて申し訳ありません。

4

3 に答える 3

6

あなたは間違っています。JavaScript でオブジェクトのキーに値を割り当てる場合、そのチェックを実行する必要はありません。そのキーの値がすでに存在するかどうかに関係なく、値が割り当てられます。

考えてみてください。最初に値が必要な場合、オブジェクトまたはハッシュに値を取得するにはどうすればよいでしょうか?

于 2010-03-30T02:57:24.953 に答える
4

Perlの「auto-vivification」http://en.wikipedia.org/wiki/Autovivificationが関連していると思いますが、説明したものとは動作が異なります。wikiページには良い要約があります。Rubyのような他の言語は、割り当てられていないハッシュキーの「デフォルトアクション」フックをサポートしています。これは、自動活性化にも使用できます。

たとえば、Rubyでは次のようになります。


>> h = Hash.new {|h,k| h[k] = {}}
=> {}
>> h["hello"]["world"] = 20
=> 20
>> h["hello"]["world"]
=> 20

于 2010-03-30T03:10:15.087 に答える
1

Javascript はここで PHP とまったく同じことを行います: myObject[key] = "value" は、既存の値が存在する場合、既存の値を上書きします。違うと思う理由を教えていただけますか?

于 2010-03-30T02:59:43.780 に答える