Php 有效地测试四个数字中是否有三个相等?

Php 有效地测试四个数字中是否有三个相等?,php,if-statement,Php,If Statement,我正在尝试确定一种快速选择数字集的方法(它们将以数组形式出现)。我只需要保持两个或更多的数字大于零的集合;因此,可以丢弃包含三次零的集合。我已经提出了以下代码,但它没有预期的结果,任何建议将不胜感激 <?php function testFour($a, $b, $c, $d) { if(($a + $b + $c + $d) == ($a || $b || $c || $d)) { echo $a.", ".$b.", ".$c.", ".$d." => exclu

我正在尝试确定一种快速选择数字集的方法(它们将以数组形式出现)。我只需要保持两个或更多的数字大于零的集合;因此,可以丢弃包含三次零的集合。我已经提出了以下代码,但它没有预期的结果,任何建议将不胜感激

<?php
function testFour($a, $b, $c, $d)
{
  if(($a + $b + $c + $d) == ($a || $b || $c || $d)) {
      echo $a.", ".$b.", ".$c.", ".$d." => exclude<br>";
    } else {
      echo $a.", ".$b.", ".$c.", ".$d." => keep<br>";
    }
}
echo "<pre>";
testFour(0,0,0,5); // true
testFour(1,0,0,5); // false
testFour(0,4,2,0); // false
testFour(1,1,0,5); // false
testFour(0,2,0,0); // true
testFour(2,3,0,0); // false
echo "</pre>";
尝试一下:

function testFour(...$bools) {
   $threshold = 3;
   return count($bools) - count(array_filter($bools)) >= $threshold;
}
尝试一下:

function testFour(...$bools) {
   $threshold = 3;
   return count($bools) - count(array_filter($bools)) >= $threshold;
}

对于任何数量的值,都可以按要求执行以下操作:

这是因为通过回调确定每个数组值是否为真,当没有提供回调时(转换为
布尔值后)
)项将被删除。另外,
…$bools
作为参数将单独传递的参数转换为
数组

你也可以:

  • 动态计算
    $threshold
  • 传递参数传递值的
    数组
    ,而不是单独传递每个值

对于任意数量的值,以下操作都可以:

这是因为通过回调确定每个数组值是否为真,当没有提供回调时(转换为
布尔值后)
)项将被删除。另外,
…$bools
作为参数将单独传递的参数转换为
数组

你也可以:

  • 动态计算
    $threshold
  • 传递参数传递值的
    数组
    ,而不是单独传递每个值

只需在数字中循环,并记录有多少大于0。一旦计数到2,则返回真值
只需在数字中循环,并记录有多少大于0。一旦计数到2,则返回真值
谢谢!我以前在php中没有见过这种条件表示法,它叫什么?还有,你能解释一下它是怎么工作的吗?@Alex,它叫“the”。谢谢!我以前在php中没有见过这种条件表示法,它叫什么?另外,你能解释一下它是如何工作的吗?@Alex,它叫“the”。