ID: 49242 Updated by: ram...@php.net Reported By: ram...@php.net Status: Open Bug Type: Feature/Change Request Operating System: n/a PHP Version: 5.3SVN-2009-08-13 (SVN) New Comment:
Patch for zend_compare_arrays_identity(): Index: Zend/zend_operators.c =================================================================== --- Zend/zend_operators.c (revision 287194) +++ Zend/zend_operators.c (working copy) @@ -2011,12 +2011,24 @@ } /* }}} */ +ZEND_API void zend_compare_symbol_tables_identity(zval *result, HashTable *ht1, HashTable *ht2 TSRMLS_DC) /* {{{ */ +{ + ZVAL_LONG(result, zend_hash_compare(ht1, ht2, (compare_func_t) hash_zval_compare_function, 1 TSRMLS_CC)); +} +/* }}} */ + ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC) /* {{{ */ { zend_compare_symbol_tables(result, Z_ARRVAL_P(a1), Z_ARRVAL_P(a2) TSRMLS_CC); } /* }}} */ +ZEND_API void zend_compare_arrays_identity(zval *result, zval *a1, zval *a2 TSRMLS_DC) /* {{{ */ +{ + zend_compare_symbol_tables_identity(result, Z_ARRVAL_P(a1), Z_ARRVAL_P(a2) TSRMLS_CC); +} +/* }}} */ + ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC) /* {{{ */ { Z_TYPE_P(result) = IS_LONG; Index: Zend/zend_operators.h =================================================================== --- Zend/zend_operators.h (revision 287194) +++ Zend/zend_operators.h (working copy) @@ -319,6 +319,7 @@ ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2); ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2 TSRMLS_DC); ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC); +ZEND_API void zend_compare_arrays_identity(zval *result, zval *a1, zval *a2 TSRMLS_DC); ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC); ZEND_API int zend_atoi(const char *str, int str_len); Previous Comments: ------------------------------------------------------------------------ [2009-08-13 03:16:40] ram...@php.net Description: ------------ I'm using the embed SAPI, and I came across an issue when using zend_hash_compare(). I wanted to use the provided hash_zval_compare_function() as the callback function for the compar parameter. However, I cannot use this, since it is not exposed. I could use zend_compare_arrays(), but it doesn't allow me to pass in a 1 as the value of the ordered parameter sent to zend_hash_compare(). Since I want to compare arrays like comparing with the identity operator, then I need to use zend_hash_compare() and create my own callback that does exactly what hash_zval_compare_function() does, thus reinventing the wheel. Either: 1) Expose hash_zval_compare_function() so it can be used by third-party apps - or - 2) Make a second version of zend_compare_arrays() that allows you to compare arrays by identity (i.e. zend_compare_arrays_identity()?) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=49242&edit=1