【发布时间】:2019-09-11 20:19:27
【问题描述】:
在搜索了一些关于这个问题的 SO 问题后,我只能找到 this 和 this 但两者都不允许将参数(AKA needle)发送到搜索函数,而是使用预定义函数并使用 array_filter。
我搜索了in_array documentation,但没有找到。
我想要类似的东西(如usort 启用):
function uin_array($haystack, $needle, $compareFunc)
我设法用简单的foreach 循环来实现它:
function uin_array($haystack, $needle, $compareFunc) {
foreach($haystack as $e) {
if ($compareFunc($needle, $e) == 0)
return true;
}
return false;
}
例子:
$found = uin_array(["AA", "BB", "CC", "DD"], "cc", "strcasecmp");
这也可以用于在多维数组中搜索。
我的问题:
PHP 中是否有任何我不知道的内置函数/标志? 有没有更好的实现方式?
编辑:
我知道我可以将array_filter 用作:current(array_filter($haystack, function($element) use ($needle) { ... })) 但在 所有 情况下是 O(n) - 在某些情况下使用循环和中断或 in_array 可能是 O(1) (仅在最坏的情况下为 O(n),但不是全部)
【问题讨论】:
-
array_filter? -
我知道我可以做类似
current(array_filter($haystack, function($element) use ($needle) { ... }))的事情,但在所有情况下都是O(n)- 使用循环和中断或in_array在某些情况下可能是O(1)(将是O(n)仅在最坏的情况下,但不是全部) -
您在问题中提供的功能是最佳解决方案。核心 php 没有任何用户定义的
in_array变体。