andrei          Sat Dec 13 00:38:31 2008 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src    NEWS 
    /php-src/ext/standard       array.c 
    /php-src/ext/standard/tests/array   array_unique_error.phpt 
                                        array_unique_variation1.phpt 
                                        array_unique_variation2.phpt 
                                        array_unique_variation6.phpt 
                                        array_unique_variation8.phpt 
  Log:
  MFH
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.1359&r2=1.2027.2.547.2.1360&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.1359 php-src/NEWS:1.2027.2.547.2.1360
--- php-src/NEWS:1.2027.2.547.2.1359    Fri Dec 12 04:21:01 2008
+++ php-src/NEWS        Sat Dec 13 00:38:28 2008
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2009, PHP 5.2.9
+- Added optional sorting type flag parameter to array_unique(), default is
+  SORT_REGULAR. (Andrei)
 - Fixed security issue in imagerotate(), background colour isn't validated
   correctly with a non truecolour image. (Scott)
 
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.308.2.21.2.59&r2=1.308.2.21.2.60&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.308.2.21.2.59 
php-src/ext/standard/array.c:1.308.2.21.2.60
--- php-src/ext/standard/array.c:1.308.2.21.2.59        Wed Nov 26 01:00:36 2008
+++ php-src/ext/standard/array.c        Sat Dec 13 00:38:29 2008
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.308.2.21.2.59 2008/11/26 01:00:36 lbarnaud Exp $ */
+/* $Id: array.c,v 1.308.2.21.2.60 2008/12/13 00:38:29 andrei Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -2813,12 +2813,11 @@
 }
 /* }}} */
 
-/* {{{ proto array array_unique(array input)
+/* {{{ proto array array_unique(array input [, int sort_flags])
    Removes duplicate values from array */
 PHP_FUNCTION(array_unique)
 {
-       zval **array, *tmp;
-       HashTable *target_hash;
+       zval *array, *tmp;
        Bucket *p;
        struct bucketindex {
                Bucket *b;
@@ -2826,34 +2825,31 @@
        };
        struct bucketindex *arTmp, *cmpdata, *lastkept;
        unsigned int i;
+       long sort_type = SORT_REGULAR;
 
-       if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == 
FAILURE) {
-               WRONG_PARAM_COUNT;
-       }
-       target_hash = HASH_OF(*array);
-       if (!target_hash) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument 
should be an array");
-               RETURN_FALSE;
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a|l", &array, 
&sort_type) == FAILURE) {
+               return;
        }
 
+       set_compare_func(sort_type TSRMLS_CC);
+
        array_init(return_value);
-       zend_hash_copy(Z_ARRVAL_P(return_value), target_hash, 
(copy_ctor_func_t) zval_add_ref, (void *)&tmp, sizeof(zval*));
+       zend_hash_copy(Z_ARRVAL_P(return_value), Z_ARRVAL_P(array), 
(copy_ctor_func_t) zval_add_ref, (void *)&tmp, sizeof(zval*));
 
-       if (target_hash->nNumOfElements <= 1) { /* nothing to do */
+       if (Z_ARRVAL_P(array)->nNumOfElements <= 1) {   /* nothing to do */
                return;
        }
 
        /* create and sort array with pointers to the target_hash buckets */
-       arTmp = (struct bucketindex *) pemalloc((target_hash->nNumOfElements + 
1) * sizeof(struct bucketindex), target_hash->persistent);
+       arTmp = (struct bucketindex *) 
pemalloc((Z_ARRVAL_P(array)->nNumOfElements + 1) * sizeof(struct bucketindex), 
Z_ARRVAL_P(array)->persistent);
        if (!arTmp) {
                RETURN_FALSE;
        }
-       for (i = 0, p = target_hash->pListHead; p; i++, p = p->pListNext) {
+       for (i = 0, p = Z_ARRVAL_P(array)->pListHead; p; i++, p = p->pListNext) 
{
                arTmp[i].b = p;
                arTmp[i].i = i;
        }
        arTmp[i].b = NULL;
-       set_compare_func(SORT_STRING TSRMLS_CC);
        zend_qsort((void *) arTmp, i, sizeof(struct bucketindex), 
array_data_compare TSRMLS_CC);
 
        /* go through the sorted array and delete duplicates from the copy */
@@ -2879,7 +2875,7 @@
                        }
                }
        }
-       pefree(arTmp, target_hash->persistent);
+       pefree(arTmp, Z_ARRVAL_P(array)->persistent);
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_unique_error.phpt?r1=1.1.4.2&r2=1.1.4.3&diff_format=u
Index: php-src/ext/standard/tests/array/array_unique_error.phpt
diff -u php-src/ext/standard/tests/array/array_unique_error.phpt:1.1.4.2 
php-src/ext/standard/tests/array/array_unique_error.phpt:1.1.4.3
--- php-src/ext/standard/tests/array/array_unique_error.phpt:1.1.4.2    Sun Dec 
 9 14:44:18 2007
+++ php-src/ext/standard/tests/array/array_unique_error.phpt    Sat Dec 13 
00:38:29 2008
@@ -17,7 +17,7 @@
 echo "\n-- Testing array_unique() function with more than expected no. of 
arguments --\n";
 $input = array(1, 2);
 $extra_arg = 10;
-var_dump( array_unique($input, $extra_arg) );
+var_dump( array_unique($input, SORT_NUMERIC, $extra_arg) );
 
 echo "Done";
 ?>
@@ -26,11 +26,11 @@
 
 -- Testing array_unique() function with zero arguments --
 
-Warning: Wrong parameter count for array_unique() in %s on line %d
+Warning: array_unique() expects at least 1 parameter, 0 given in %s on line %d
 NULL
 
 -- Testing array_unique() function with more than expected no. of arguments --
 
-Warning: Wrong parameter count for array_unique() in %s on line %d
+Warning: array_unique() expects at most 2 parameters, 3 given in %s on line %d
 NULL
 Done
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_unique_variation1.phpt?r1=1.1.4.2&r2=1.1.4.3&diff_format=u
Index: php-src/ext/standard/tests/array/array_unique_variation1.phpt
diff -u php-src/ext/standard/tests/array/array_unique_variation1.phpt:1.1.4.2 
php-src/ext/standard/tests/array/array_unique_variation1.phpt:1.1.4.3
--- php-src/ext/standard/tests/array/array_unique_variation1.phpt:1.1.4.2       
Sun Dec  9 14:44:18 2007
+++ php-src/ext/standard/tests/array/array_unique_variation1.phpt       Sat Dec 
13 00:38:29 2008
@@ -98,97 +98,98 @@
 *** Testing array_unique() : Passing non array values to $input argument ***
 -- Iteration 1 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, integer given in %s 
on line %d
+NULL
 -- Iteration 2 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, integer given in %s 
on line %d
+NULL
 -- Iteration 3 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, integer given in %s 
on line %d
+NULL
 -- Iteration 4 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, integer given in %s 
on line %d
+NULL
 -- Iteration 5 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, double given in %s on 
line %d
+NULL
 -- Iteration 6 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, double given in %s on 
line %d
+NULL
 -- Iteration 7 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, double given in %s on 
line %d
+NULL
 -- Iteration 8 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, double given in %s on 
line %d
+NULL
 -- Iteration 9 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, double given in %s on 
line %d
+NULL
 -- Iteration 10 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, null given in %s on 
line %d
+NULL
 -- Iteration 11 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, null given in %s on 
line %d
+NULL
 -- Iteration 12 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, boolean given in %s 
on line %d
+NULL
 -- Iteration 13 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, boolean given in %s 
on line %d
+NULL
 -- Iteration 14 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, boolean given in %s 
on line %d
+NULL
 -- Iteration 15 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, boolean given in %s 
on line %d
+NULL
 -- Iteration 16 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, string given in %s on 
line %d
+NULL
 -- Iteration 17 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, string given in %s on 
line %d
+NULL
 -- Iteration 18 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, string given in %s on 
line %d
+NULL
 -- Iteration 19 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, string given in %s on 
line %d
+NULL
 -- Iteration 20 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, string given in %s on 
line %d
+NULL
 -- Iteration 21 --
-array(0) {
-}
+
+Warning: array_unique() expects parameter 1 to be array, object given in %s on 
line %d
+NULL
 -- Iteration 22 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, null given in %s on 
line %d
+NULL
 -- Iteration 23 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
+Warning: array_unique() expects parameter 1 to be array, null given in %s on 
line %d
+NULL
 -- Iteration 24 --
 
-Warning: array_unique(): The argument should be an array in %s on line %d
-bool(false)
-Done
\ No newline at end of file
+Warning: array_unique() expects parameter 1 to be array, resource given in %s 
on line %d
+NULL
+Done
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_unique_variation2.phpt?r1=1.1.4.2&r2=1.1.4.3&diff_format=u
Index: php-src/ext/standard/tests/array/array_unique_variation2.phpt
diff -u php-src/ext/standard/tests/array/array_unique_variation2.phpt:1.1.4.2 
php-src/ext/standard/tests/array/array_unique_variation2.phpt:1.1.4.3
--- php-src/ext/standard/tests/array/array_unique_variation2.phpt:1.1.4.2       
Sun Dec  9 14:44:18 2007
+++ php-src/ext/standard/tests/array/array_unique_variation2.phpt       Sat Dec 
13 00:38:29 2008
@@ -74,7 +74,7 @@
 $iterator = 1;
 foreach($inputs as $input) {
   echo "-- Iteration $iterator --\n";
-  var_dump( array_unique($input) );
+  var_dump( array_unique($input, SORT_STRING) );
   $iterator++;
 }
   
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_unique_variation6.phpt?r1=1.1.4.2&r2=1.1.4.3&diff_format=u
Index: php-src/ext/standard/tests/array/array_unique_variation6.phpt
diff -u php-src/ext/standard/tests/array/array_unique_variation6.phpt:1.1.4.2 
php-src/ext/standard/tests/array/array_unique_variation6.phpt:1.1.4.3
--- php-src/ext/standard/tests/array/array_unique_variation6.phpt:1.1.4.2       
Sun Dec  9 14:44:18 2007
+++ php-src/ext/standard/tests/array/array_unique_variation6.phpt       Sat Dec 
13 00:38:29 2008
@@ -29,7 +29,7 @@
   5 => $value4
 );
 
-var_dump( array_unique($input) );
+var_dump( array_unique($input, SORT_STRING) );
 
 echo "Done";
 ?>
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_unique_variation8.phpt?r1=1.1.4.2&r2=1.1.4.3&diff_format=u
Index: php-src/ext/standard/tests/array/array_unique_variation8.phpt
diff -u php-src/ext/standard/tests/array/array_unique_variation8.phpt:1.1.4.2 
php-src/ext/standard/tests/array/array_unique_variation8.phpt:1.1.4.3
--- php-src/ext/standard/tests/array/array_unique_variation8.phpt:1.1.4.2       
Sun Dec  9 14:44:18 2007
+++ php-src/ext/standard/tests/array/array_unique_variation8.phpt       Sat Dec 
13 00:38:29 2008
@@ -22,7 +22,7 @@
   array(1, 2, 3, 1)
 );
 
-var_dump( array_unique($input) );
+var_dump( array_unique($input, SORT_STRING) );
 
 echo "Done";
 ?>

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to