@@ -1089,9 +1089,23 @@ PHP_FUNCTION(key)
10891089}
10901090/* }}} */
10911091
1092- static int php_data_compare ( const void * f , const void * s ) /* {{{ */
1092+ static zval * php_array_data_minmax ( HashTable * array , bool max ) /* {{{ */
10931093{
1094- return zend_compare ((zval * )f , (zval * )s );
1094+ zval * entry , * result = NULL ;
1095+
1096+ ZEND_HASH_FOREACH_VAL (array , entry ) {
1097+ if (!result ) {
1098+ result = entry ;
1099+ continue ;
1100+ }
1101+
1102+ int cmp = zend_compare (result , entry );
1103+ if (max ? cmp < 0 : cmp > 0 ) {
1104+ result = entry ;
1105+ }
1106+ } ZEND_HASH_FOREACH_END ();
1107+
1108+ return result ;
10951109}
10961110/* }}} */
10971111
@@ -1114,7 +1128,7 @@ PHP_FUNCTION(min)
11141128 zend_wrong_parameter_type_error (1 , Z_EXPECTED_ARRAY , & args [0 ]);
11151129 RETURN_THROWS ();
11161130 } else {
1117- zval * result = zend_hash_minmax (Z_ARRVAL (args [0 ]), php_data_compare , 0 );
1131+ zval * result = php_array_data_minmax (Z_ARRVAL (args [0 ]), false );
11181132 if (result ) {
11191133 RETURN_COPY_DEREF (result );
11201134 } else {
@@ -1242,7 +1256,7 @@ PHP_FUNCTION(max)
12421256 zend_wrong_parameter_type_error (1 , Z_EXPECTED_ARRAY , & args [0 ]);
12431257 RETURN_THROWS ();
12441258 } else {
1245- zval * result = zend_hash_minmax (Z_ARRVAL (args [0 ]), php_data_compare , 1 );
1259+ zval * result = php_array_data_minmax (Z_ARRVAL (args [0 ]), true );
12461260 if (result ) {
12471261 RETURN_COPY_DEREF (result );
12481262 } else {
0 commit comments