1

in_arrayこれらの配列は両方とも非常に大きい (50,000 以上) ため、使用せずに 2 つの配列を比較するのが好きです。最初の配列から欠落しているすべてのものの新しい配列を生成するのが好きです。

私が使用する最速で最も効率的なソリューションは何ですか?

最初の配列
SQL クエリから生成された多次元配列

Array (
  [0] => Array (
    [id] => 17228219
    [name] => ...
  )
  [1] => Array (
    [id] => 17228220
    [name] => ...
  )
  [2] => Array (
    [id] => 17228221
    [name] => ...
  )
  [3] => Array (
    [id] => 17228222
    [name] => ...
  )
  [4] => Array (
    [id] => 17228223
    [name] => ...
  )
  [5] => Array (
    [id] => 17228224
    [name] => ...
  )
)


単純な XML から生成された2 番目の配列

Array (
  [0] => SimpleXMLElement Object (
    [0] => 17228219
  )
  [1] => SimpleXMLElement Object (
    [0] => 17228221
  )
  [2] => SimpleXMLElement Object (
    [0] => 17228222
  )
  [3] => SimpleXMLElement Object (
    [0] => 17228224
  )
)

新しい配列
ID が欠落している配列を作成します

Array (
  [0] => Array (
    [id] => 17228220
    [name] => ...
  )
  [1] => Array (
    [id] => 17228223
    [name] => ...
  )
)
4

3 に答える 3

1

アルゴリズムの観点から見ると、最も速いのはアイテムごとの (マージソートのような) 比較であり、2 つのソートされた配列を使用した 1 つのパスによる補完検出です...時間の複雑さ O(N logN) + O(MlogM) + O(M + N) ~ O(N log N)...

AVL ツリーはやり過ぎです...

于 2013-04-23T21:15:49.267 に答える
0

VX が提案するように、両方のセットの配列キーとして「id」を使用すると、PHP ベースのアルゴリズムがはるかに高速になります。

ただし、最も効率的な解決策は、参照セットをデータベースに残し、XML レコードをデータベースに追加して、特に参照セットが比較よりも大きい場合に、挿入時または後続の SELECT with join のいずれかで衝突/非衝突を検出することです。設定。

一致しないデータで何をしようとしているのかはわかりません。これは、アプローチに関係があります。

于 2013-04-23T21:28:54.650 に答える