php - 过滤后,检查过滤后数组是否不为空或是否具有所有原始值;像 Javascript 的 some() 和 every()

标签 php arrays functional-programming is-empty

<分区>

JavaScript 具有数组检查器函数 someevery 的概念,基本上检查条件是否适用于数组的至少一个或所有元素。

function isBiggerThan10(element, index, array) {
  return element > 10;
}

[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true

是否有 php 的等效方法?

最佳答案

记住:编程不是魔法。不同的语言提供不同的 native 特性/功能,但这并不总是意味着当您发现您的语言“缺少”某些东西时您就会陷入困境。

接受自己实现这些事情的挑战会很有趣,也很有收获。

function array_any(callable $f, array $xs) {
  foreach ($xs as $x)
    if (call_user_func($f, $x) === true)
      return true;
  return false; 
}

function array_all(callable $f, array $xs) {
  foreach ($xs as $x)
    if (call_user_func($f, $x) === false)
      return false;
  return true; 
}

现在您可以像预期的那样使用它们了

echo (int) array_any(function($x) { return $x > 5; }, [1,2,3]); // 0
echo (int) array_any(function($x) { return $x > 5; }, [1,9,3]); // 1

echo (int) array_all(function($x) { return $x > 5; }, [5,6,7]);  // 0
echo (int) array_all(function($x) { return $x > 5; }, [6,7,8]);  // 1

@ggorlen 建议打开 truthy回调提供的值。 PHP 中的所有值都被视为 true,但以下情况除外:

<表类="s-表"> <头> 类型 值 <正文> bool 值 错误 整数 0 float 0.0 和 -0.0 字符串 "" 数组 [], 空数组 空 空 对象 overloaded objects

注意 NAN , 它被认为是 true .

function array_any(callable $f, array $xs) {
  foreach ($xs as $x)
    if (call_user_func($f, $x) == true) // truthy
      return true;
  return false; 
}

function array_all(callable $f, array $xs) {
  foreach ($xs as $x)
    if (call_user_func($f, $x) == false) // truthy
      return false;
  return true; 
}

关于php - 过滤后,检查过滤后数组是否不为空或是否具有所有原始值;像 Javascript 的 some() 和 every(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41831122/

相关文章:

php - 测试 Doctrine EntityManager 写入失败

php - 用 TCPDF 编写变量 PHP

php - 如何在 Drupal 中将表单值推送到数据库

php - 在 Codeigniter 2.0.2 中安装插件

arrays - 检查Julia数组中的所有元素是否相等

java - 如何有效地对一个数组进行排序

javascript - 根据前一个元素查找下一个元素

php - 如何对数组项进行分类?

function - F# 中 let、fun 和 function 之间的区别

list - 是否有从列表中生成元组的 Scala 列表操作?