PHP max()和min()使用不同类型的奇怪行为
过去两个小时我一直在摸索这个行为:
echo 'max(1,"a","2" ) : '; var_dump( max( 1,'a','2' ) ); echo 'max(1,"2","a" ) : '; var_dump( max( 1,'2','a' ) ); echo 'max( "a",1) : '; var_dump( max( 'a',1 ) ); echo 'max( "2",1) : '; var_dump( max( '2',1 ) ); echo "n"; echo 'min(1,"2" ) : '; var_dump( min( 1,'2' ) ); echo 'min(1,"a" ) : '; var_dump( min( 1,'a' ) ); echo 'min( "a",1) : '; var_dump( min( 'a',1 ) ); echo 'min( "2",1) : '; var_dump( min( '2',1 ) ); 打印出来: max(1,"2" ) : string(1) "2" max(1,"a" ) : string(1) "a" max( "a",1) : int(1) max( "2",1) : int(1) min(1,"2" ) : string(1) "2" min(1,"a" ) : string(1) "a" min( "a",1) : int(1) min( "2",1) : int(1) 当我期待: max(1,"a" ) : string(1) "2" max( "a",1) : string(1) "2" max( "2",1) : string(1) "2" min(1,"2" ) : string(1) "a" min(1,1) : string(1) "a" min( "2",1) : string(1) "a" 请注意,max()和min()函数的值始终相同,但顺序不同. 此外,根据文档,与整数相比,不以数字字符开头的字符串被评估为整数0,但是字母数字比较多个字符串值.资源: > http://php.net/manual/en/function.max.php 如何解释这个输出? min() 和
max() 中的比较按顺序进行,因为这可以在源代码中看到:
//... min = &args[0]; for (i = 1; i < argc; i++) { is_smaller_function(&result,&args[i],min); if (Z_TYPE(result) == IS_TRUE) { min = &args[i]; } } //...
//... max = &args[0]; for (i = 1; i < argc; i++) { is_smaller_or_equal_function(&result,max); if (Z_TYPE(result) == IS_FALSE) { max = &args[i]; } } //... 因此,您可以看到该函数通过数组并检查下一个值是否小于/大于先前最小/最大保存值. 要了解如何获得这些结果,您还必须知道值的比较是在PHP type juggling.之后完成的 那么让我们看两个例子来看看这些函数是如何工作的: 例1 max ( 1,'2' ) │ │ │ 1 > 'a' │ │ │ 1 < '2' │ └ Result: '2' >比较1和’a’,数字上下文表示’a’转换为0,1表示大于0. >结果:字符串’2′ 例2 max ( 1,'a' ) │ │ │ 1 < '2' │ │ │ '2' < 'a' │ └ Result: 'a' >比较1和’2′,大于1. >结果:字符串’a’ 所有其他示例都适用相同的规则. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |