]> granicus.if.org Git - php/commitdiff
Add sort flags parameter to array_unique().
authorAndrei Zmievski <andrei@php.net>
Fri, 12 Dec 2008 19:19:04 +0000 (19:19 +0000)
committerAndrei Zmievski <andrei@php.net>
Fri, 12 Dec 2008 19:19:04 +0000 (19:19 +0000)
ext/standard/array.c

index eb18b0e46faeb27cdcb4c7aa667e71861102e7c5..0a80ad3b87e3b6f76f99f941d5fd05ab10eaaf76 100644 (file)
@@ -2895,7 +2895,7 @@ PHP_FUNCTION(array_change_key_case)
 }
 /* }}} */
 
-/* {{{ proto array array_unique(array input) U
+/* {{{ proto array array_unique(array input [, int sort_flags]) U
    Removes duplicate values from array */
 PHP_FUNCTION(array_unique)
 {
@@ -2907,11 +2907,14 @@ PHP_FUNCTION(array_unique)
        };
        struct bucketindex *arTmp, *cmpdata, *lastkept;
        unsigned int i;
+       long sort_type = PHP_SORT_REGULAR;
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, &sort_type) == FAILURE) {
                return;
        }
 
+       php_set_compare_func(sort_type TSRMLS_CC);
+
        array_init_size(return_value, zend_hash_num_elements(Z_ARRVAL_P(array)));
        zend_hash_copy(Z_ARRVAL_P(return_value), Z_ARRVAL_P(array), (copy_ctor_func_t) zval_add_ref, (void *)&tmp, sizeof(zval*));
 
@@ -2930,7 +2933,6 @@ PHP_FUNCTION(array_unique)
                arTmp[i].i = i;
        }
        arTmp[i].b = NULL;
-       php_set_compare_func(PHP_SORT_STRING TSRMLS_CC);
        zend_qsort((void *) arTmp, i, sizeof(struct bucketindex), php_array_data_compare TSRMLS_CC);
 
        /* go through the sorted array and delete duplicates from the copy */