2

バックグラウンド:

私が構築しているこのアプリケーションには、次のようなクラスがあります。

  • __construct:$this->data = $this->mongoDB->collection->findOne();
  • 中間関数は、各要求で数十の異なる方法でデータを操作するために使用されます。ある操作が別の操作をトリガーする可能性があります。これにより、同じである限り、1回のクエリでmongoドキュメントを無制限に更新できます$this->data['_id']。これは、この特定のコレクションのデータ操作が許可されている唯一の場所です。
  • __destruct:$this->monboDB->collection->save($data)
  • 次に、データが読み戻さjson_encodeれ、ページを描画するためにJavascriptに送信されます。

目的:

私は、配列をループし、その中の値を照合し、その設定を解除することによって、配列のメンバーを削除するつもりでした。例:

foreach($this->data['documents'] as $key => $val){
    if($val == $toBeDeleted){
        unset($this->data['documents'][$key];
    }
}

次に、スクリプトが終了すると、これがDBに保存されます。

問題:

javascriptがデータを読み戻すとき、持っているのではなく['a', 'b', 'd']、私は持っていました{'0': 'a', '1': 'b', '3': 'd'}-これは配列のように扱うことができず、物事をかなり壊してしまいます。

4

1 に答える 1

4

この質問は、私の前に半分入力してもらいました。その瞬間、私は将来の参考のために私自身の答えも投稿すると思いました。

PHPでは、連想配列と配列はすべて同じです。順序が正しくないキー、連続していないキー、および配列メンバーの呼び出しに使用するほとんどすべてのキーを使用できます。すべてではないにしても、ほとんどのphp配列関数は任意の配列キーで機能します。オブジェクトはまったく別のものです。

そうは言っても、Javascriptは配列に対して同じルールを共有していません。javascript配列には、ゼロから始まる連続したキーが必要です。そうでない場合は、オブジェクトです。この点で、MongoDBはJavascriptに似ています。

phpがMongoDBまたはJavascriptで使用されるオブジェクトを変換するときに、php配列がその規則に従わない場合、それはJavascriptオブジェクトになります。

問題は、配列インデックスの設定を解除した後、ギャップが残り、連続しない配列キーが発生し、オブジェクトになることでした。簡単な修正は、array_slice($array, $key, 1)または$array = array_values($array)

于 2013-02-13T18:16:47.410 に答える