2011-07-22 38 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