【问题标题】:Is there a logical difference between nested Min (), Max () functions in PHP?PHP中嵌套的Min()、Max()函数有逻辑上的区别吗?
【发布时间】:2013-06-01 23:42:13
【问题描述】:

这两个函数有逻辑上的区别吗?

min ( $a , $b , $c ) ;

min ( $a , min ( $b , $c ) ) ;

编辑

目前正在开发一个小类来管理 color 对象,用于在颜色空间之间操作通道值,例如 ; RGBtoHEXRGBtoCMYK 等...当我在寻找一些示例代码以更好地理解转换算法时,许多编写的函数都实现了第二种方法来计算最小值,给定 RGB 通道的最大值,如 ;

$min = min ( $R , min ( $G , $B ) ) ;

所以;假设以下函数是否返回相同的$min 值是否安全?

$min = min ( $R , $G , $B ) ;

【问题讨论】:

  • 不,它们的结果应该相同。不过,第一个应该更有效。
  • just min(2, 1, -2) == min(min(2,1), -2) ,这些都是相等的,导致相同的结果,在 min() 中也可以比较无限数量的值。 (根据文档)
  • @raina77ow:你完全正确,他们应该是相同的。事实是它们不是:min('0', 0, '.') !== min('0', min(0, '.'))(如PleaseStand suggests in the answer)。证明:ideone.com/PZeSQI
  • 您可能看到min(a,min(b,c)) 的原因是在许多库中,min() 函数只能接受两个参数。在 PHP 中,它们是相同的,除了比较混合数据类型的任何奇怪的边缘情况。
  • @Matthew link 这些是开源 .NET 扩展的颜色算法。我见过很多只用 2 个参数用各种语言编写的,但也有很多是用 PHP 编写的。我认为有很多类似的 bad-formed PHP 函数被粗心地从任何其他语言或彼此移植而来。感谢您指出这一限制。

标签: php logic


【解决方案1】:

不同,尽管在实践中不太可能遇到。

php> $a = '0'; $b = 0; $c = '.';
php> var_dump(min($b,$c));
int(0)
php> var_dump(min($a,min($b,$c)));
string(1) "0"
php> var_dump(min($a,$b,$c));
string(1) "."

来自documentation的相关引用:

如果与整数比较,PHP 会将非数字字符串评估为 0,但如果将其视为数字最小值,则仍返回该字符串。如果多个参数的计算结果为 0,则 min() 将返回最小的字母数字字符串值(如果给出任何字符串),否则返回数字 0。

【讨论】:

  • 我不想引发烈火大战,但这是 PHP 开发人员需要考虑的许多 PHP 不一致之处之一。 min($a, $b, $c) !== min($a, min($b, $c)) 就是一个很好的例子。给你点赞。
  • 所以结果取决于我认为的变量。很高兴知道这两个函数不会产生相同的结果无论如何
  • PHP 真正的 WTH 是 min($a, $b) !== min($b, $a) 在太多情况下。
猜你喜欢
  • 1970-01-01
  • 2016-03-07
  • 2016-05-20
  • 1970-01-01
  • 2019-11-06
  • 2011-06-26
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多