【问题标题】:Does PHP have an equivalent to Python's all()PHP 是否有等价于 Python 的 all()
【发布时间】:2013-06-27 21:54:30
【问题描述】:

Python 有一个很好的 all() (doc) 方法,如果可迭代对象中的所有元素都为真,则该方法返回真,相当于:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

在 PHP 中有类似的好方法吗?

【问题讨论】:

  • 不能用php写那个函数吗?短路行为对性能和无限迭代很重要。
  • 我当然可以用 PHP 编写。但我更喜欢在适当的时候使用内置函数。更少的代码就是更多。
  • 我不明白为什么这个问题会被否决。它简洁,包括示例代码和文档链接,供不熟悉 python 函数的人使用。
  • 另见:What is PHP's equivalent of JavaScript's "array.every()"?(JS some 和 Python all 几乎相同)

标签: php python python-2.7 functional-programming


【解决方案1】:

最接近它的可能是array_filter,如果没有找到真正的元素,它将返回评估为假的空数组。

第二个想法它更像是蟒蛇any()。要模拟all(),您需要if(array_filter($array) == $array) 甚至if(array_filter($array) == $array && $array) 来排除空数组。

【讨论】:

  • 谢谢!这比我为此使用的 for 循环要好得多。
  • all([]) 在 Python2 和 3 中是 true,因此您不应使用 && $array 部分来模仿 Python。
  • 这不会短路,因此比 Python 的版本贵得多。最好的办法是编写一个短路循环版本并将其放入函数中以供重用。
【解决方案2】:

没有这样的功能,但你可以达到同样的效果:

count(array_keys($array, 'yes')) == count($array)

【讨论】:

  • 不是真的,这不会短路
猜你喜欢
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2013-04-20
  • 2011-02-03
相关资源
最近更新 更多