12

何を使うべきか疑問です:

foreach(){
    // .....

    if(!in_array($view, $this->_views[$condition]))
        array_push($this->_views[$condition], $view);

    // ....
}

また

foreach(){
    // .....

    array_push($this->_views[$condition], $view);

    // ....
}

$this->_views[$condition] = array_unique($this->_views[$condition]);

アップデート

目標は、一意の値の配列を取得することです。これは、 value が既に存在するかどうかを毎回確認するか、毎回in_arrayすべての値を最終的に追加することで実行できますarray_unique。では、この2つの方法に大きな違いはありますか?

4

3 に答える 3

14

2番目のアプローチの方が効率的だと思います。実際、array_unique は配列をソートしてからスキャンします。

並べ替えは N log N ステップで行われ、スキャンは N ステップかかります。

最初のアプローチでは、N^2 の手順が必要です (foreach 要素は、前の N 個の要素をすべてスキャンします)。大きな配列では、非常に大きな違いがあります。

于 2013-04-10T22:01:46.280 に答える
4

正直なところ、小さなデータセットを使用している場合、どのデータセットを使用しても問題ありません。データセットが 10000 の範囲にある場合、この種の処理にはハッシュ マップを使用することをお勧めします。

これは、ビューが文字列か何かであると仮定しています。これは通常 O(n) であり、おそらく一意の値の追跡を処理する最速の方法です。

foreach($views as $view)
{
    if(!array_key_exists($view,$unique_views))
    {
        $unique_views[$condition][$view] = true;
    }
}
于 2013-04-10T22:13:36.107 に答える