2011-07-22 19 views
0

私はPHPで本当に新しく、配列検索についての提案が必要です。検索配列:array_filterとループ

多次元配列内の要素を検索する場合は、array_filterを使用するか、配列をループして条件に一致する要素が存在するかどうかを確認できます。

多くの場所で両方の提案が表示されます。どちらが速いの?以下はサンプル配列です。

Array ( 
    [0] => Array ( 
    [id] => 4e288306a74848.46724799 
    [question] => Which city is capital of New York? 
    [answers] => Array ( 
     [0] => Array ( 
     [id] => 4e288b637072c6.27436568 
     [answer] => New York 
     [question_id_fk] => 4e288306a74848.46724799 
     [correct] => 0 
    ) 
     [1] => Array ( 
     [id] => 4e288b63709a24.35955656 
     [answer] => Albany 
     [question_id_fk] => 4e288306a74848.46724799 
     [correct] => 1 
    ) 
    ) 
) 
) 

私はこのように探しています。 コールバック関数に渡す入力アレイ内の各値を超える

$thisQuestion = array_filter($pollQuestions, function($q) { 
    return questionId == $q["id"]; 
}); 
+0

あなたがしたいことを正確に記述してください。多次元配列ですか? 'array_filter()'はそれらをネイティブに処理できません。配列内の単一の値を探していますか? 'array_filter()'はこれを行う最良の方法ではありません。あなたが探していた値を見つけた時に反復を止めることができるからです。 'array_filter()'はそれをしません。より大きなセットから値のセットをフィルタリングしますか?おそらく、 'array_filter()'は組込み関数であるため、手でコード化された 'foreach'ループより高速です。 –

+0

@Stefan Gehrigサンプル配列とarray_filterのコードを追加しました。私のポイントは、forループを実行するのと似ていなければならないか、それとも速くなるのでしょうか?私の最大配列サイズは30です。 –

答えて

1

Array_Filter

反復処理。コールバック関数がtrueを返すと、現在の の値が結果配列に返されます。配列キーは です。

私と同じです。

0

私は知っていますが、質問は古いですが、私は例外的な答えには同意しません。以下の投稿がforeach()ループ間の差とarray_filter()機能だったし、見つかった場合、私はまた、思っていた:

http://www.levijackson.net/are-array_-functions-faster-than-loops/

リーバイジャクソンは素晴らしい仕事をしたし、いくつかのループとarray_*()機能の速度を比較しました。彼によれば、foreach()ループは、array_filter()機能よりも高速です。このような大きな違いはほとんどありませんが、大量のデータを処理する必要があるときには問題になります。

+0

これは答えですか、それとも答えへのリンクですか?後者の場合は、話題にはならない。 – GrumpyCrouton