【发布时间】:2012-12-22 21:15:49
【问题描述】:
基本上,我希望能够获得 C++ 的find_if()、Smalltalk 的detect: 等的功能:
// would return the element or null
check_in_array($myArray, function($element) { return $elemnt->foo() > 10; });
但我不知道有任何 PHP 函数可以做到这一点。我想出了一个“近似值”:
$check = array_filter($myArray, function($element) { ... });
if ($check)
//...
这样做的缺点是代码的目的不是很清楚。此外,即使找到元素,它也不会停止对数组的迭代,尽管这更像是一个挑剔(如果数据集大到足以引起问题,线性搜索无论如何都不会成为答案)
【问题讨论】:
-
在没有找到的情况下,您是否不必在 C++/Smalltalk/etc 中做同样的事情?还是您假设总会有至少一个结果?
-
看起来您正在寻找 JS(准确地说是 ES5)的 PHP 等效项 Array.some 方法 - 但此方法返回布尔值,而不是对象。
-
布尔返回也可以。 @Izkata:是的,你当然是对的,只有在有结果的情况下才能停止迭代——所以无论如何这都是一种特殊情况。我的错。
-
有时我会尝试使用这样的函数,但位置日志中的标准
foreach会产生更简洁、更易读的代码。
标签: php collections functional-programming