2011-07-22 80 views
0

我真的是PHP新手,需要關於數組搜索的建議。搜索陣列:array_filter vs loop

如果我想搜索一個多維數組內的元素,我可以使用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

我知道,這個問題很舊,但我不同意這個例外的答案。我也想知道,如果有和array_filter()功能的foreach()環路之間的差異,發現下面的帖子:

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

列維·傑克遜做了很好的工作,比較了幾種環和array_*()功能的速度。據他說,foreach()循環比array_filter()函數更快。雖然它大多不會造成如此大的差異,但當您必須處理大量數據時,它纔會變得重要。

+0

這是一個答案,或一個答案的鏈接?如果是後者,它是無關緊要的。 – GrumpyCrouton