php 过滤后,检查数组过滤后是否不为空,是否有全部原始值;比如Javascript的some()和every()[重复]

cvxl0en2  于 2023-02-03  发布在  PHP
关注(0)|答案(4)|浏览(156)
    • 此问题在此处已有答案**:

How to check whether an array is empty using PHP?(24个答案)
(19个答案)
15小时前关门了。
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有没有等效的方法?

soat7uwm

soat7uwm1#

记住:编程不是魔术,不同的语言提供不同的原生特性/功能,但这并不意味着当你发现你的语言"缺少"一些东西时,你就卡住了。
独自承担实现这些东西的挑战可能是有趣和有益的。

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建议打开回调提供的真实值。PHP中的所有值都被认为是true,除了以下值:
| 类型|价值|
| - ------|- ------|
| 布尔|假的|
| 整数|无|
| 浮动|0.0和-0.0|
| 弦|""|
| 阵列|[],空数组|
| 零|零|
| 客体|重载对象|
注意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; 
}
mjqavswn

mjqavswn2#

我没有找到这些集合函数的本地实现。有一些函数库,其中一个是phunctional,它支持someall,例如:

use function Lambdish\Phunctional\some;

return some(
    function ($number) {
        return $number > 10;
    }, 
    [1, 4, 3, 9, 5]
);

// false
m1m5dgzv

m1m5dgzv3#

您可以简单地执行此操作(如您的示例所示):

function isBiggerThan10($value) {
  return $value >= 10;
}
echo array_filter([2, 5,8, 1, 4], "isBiggerThan10") ? 'yes' : 'no';  
echo "<br>";
echo array_filter([12, 5, 8, 1, 4], "isBiggerThan10") ? 'yes' : 'no';
a8jjtwal

a8jjtwal4#

在PHP方法中有些不存在,但你可以这样做:

<?php
function isSomeBiggerThan10($numbers){
    foreach($numbers as $num){
        if($num > 10)
            return true;
    }
    
    return false;
}

isSomeBiggerThan10([2, 5, 8, 1, 4]); //false
isSomeBiggerThan10([12, 5, 8, 1, 4]); //true

相关问题