sniper          Thu Mar 31 03:18:41 2005 EDT

  Modified files:              (Branch: PHP_4_3)
    /php-src    NEWS 
    /Zend       zend_config.w32.h zend_operators.c zend_operators.h 
    /php-src/ext/standard       array.c 
  Log:
  MFH: Added SORT_LOCALE_STRING for array sorting
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1247.2.865&r2=1.1247.2.866&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1247.2.865 php-src/NEWS:1.1247.2.866
--- php-src/NEWS:1.1247.2.865   Wed Mar 30 09:18:36 2005
+++ php-src/NEWS        Thu Mar 31 03:18:39 2005
@@ -1,5 +1,9 @@
 PHP 4                                                                      NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+?? ??? 20??, Version 4.?.?
+- Added the sorting flag SORT_LOCALE_STRING to the sort() functions which makes
+  them sort based on the current locale. (Derick)
+
 31 Mar 2005, Version 4.3.11
 - Added Oracle Instant Client support. (cjbj at hotmail dot com, Tony)
 - Added checks for negative values to gmp_sqrt(), gmp_powm(), gmp_sqrtrem()
http://cvs.php.net/diff.php/Zend/zend_config.w32.h?r1=1.26.4.3&r2=1.26.4.4&ty=u
Index: Zend/zend_config.w32.h
diff -u Zend/zend_config.w32.h:1.26.4.3 Zend/zend_config.w32.h:1.26.4.4
--- Zend/zend_config.w32.h:1.26.4.3     Mon Mar 24 17:56:29 2003
+++ Zend/zend_config.w32.h      Thu Mar 31 03:18:39 2005
@@ -45,6 +45,7 @@
 #define HAVE_STDARG_H  1
 #define HAVE_SNPRINTF  1
 #define HAVE_VSNPRINTF 1
+#define HAVE_STRCOLL   1
 
 #define snprintf _snprintf
 #define strcasecmp(s1, s2) stricmp(s1, s2)
http://cvs.php.net/diff.php/Zend/zend_operators.c?r1=1.129.2.9&r2=1.129.2.10&ty=u
Index: Zend/zend_operators.c
diff -u Zend/zend_operators.c:1.129.2.9 Zend/zend_operators.c:1.129.2.10
--- Zend/zend_operators.c:1.129.2.9     Mon Nov 29 04:15:28 2004
+++ Zend/zend_operators.c       Thu Mar 31 03:18:39 2005
@@ -1108,6 +1108,35 @@
        return SUCCESS;
 }
 
+#if HAVE_STRCOLL
+ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 
TSRMLS_DC)
+{
+       zval op1_copy, op2_copy;
+       int use_copy1, use_copy2;
+
+       zend_make_printable_zval(op1, &op1_copy, &use_copy1);
+       zend_make_printable_zval(op2, &op2_copy, &use_copy2);
+
+       if (use_copy1) {
+               op1 = &op1_copy;
+       }
+       if (use_copy2) {
+               op2 = &op2_copy;
+       }
+
+       result->value.lval = strcoll(op1->value.str.val, op2->value.str.val);
+       result->type = IS_LONG;
+
+       if (use_copy1) {
+               zval_dtor(op1);
+       }
+       if (use_copy2) {
+               zval_dtor(op2);
+       }
+       return SUCCESS;
+}
+#endif
+
 ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 
TSRMLS_DC)
 {
        zval op1_copy, op2_copy;
http://cvs.php.net/diff.php/Zend/zend_operators.h?r1=1.55.2.6&r2=1.55.2.7&ty=u
Index: Zend/zend_operators.h
diff -u Zend/zend_operators.h:1.55.2.6 Zend/zend_operators.h:1.55.2.7
--- Zend/zend_operators.h:1.55.2.6      Tue Mar 15 10:49:29 2005
+++ Zend/zend_operators.h       Thu Mar 31 03:18:40 2005
@@ -169,6 +169,9 @@
 ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
 ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 
TSRMLS_DC);
 ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 
TSRMLS_DC);
+#if HAVE_STRCOLL
+ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 
TSRMLS_DC);
+#endif
 
 ZEND_API void zend_str_tolower(char *str, unsigned int length);
 ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2);
http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.199.2.42&r2=1.199.2.43&ty=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.199.2.42 
php-src/ext/standard/array.c:1.199.2.43
--- php-src/ext/standard/array.c:1.199.2.42     Thu Dec 23 11:40:03 2004
+++ php-src/ext/standard/array.c        Thu Mar 31 03:18:40 2005
@@ -22,7 +22,7 @@
 */
 
 
-/* $Id: array.c,v 1.199.2.42 2004/12/23 16:40:03 tony2001 Exp $ */
+/* $Id: array.c,v 1.199.2.43 2005/03/31 08:18:40 sniper Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -66,6 +66,7 @@
 #define SORT_REGULAR                   0
 #define SORT_NUMERIC                   1
 #define        SORT_STRING                             2
+#define        SORT_LOCALE_STRING      5
 
 #define SORT_DESC                              3
 #define SORT_ASC                               4
@@ -103,6 +104,8 @@
        REGISTER_LONG_CONSTANT("SORT_REGULAR", SORT_REGULAR, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SORT_NUMERIC", SORT_NUMERIC, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SORT_STRING", SORT_STRING, CONST_CS | 
CONST_PERSISTENT);
+       REGISTER_LONG_CONSTANT("SORT_LOCALE_STRING", SORT_LOCALE_STRING, 
CONST_CS | CONST_PERSISTENT);
+
        REGISTER_LONG_CONSTANT("CASE_LOWER", CASE_LOWER, CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("CASE_UPPER", CASE_UPPER, CONST_CS | 
CONST_PERSISTENT);
 
@@ -132,6 +135,12 @@
                        ARRAYG(compare_func) = string_compare_function;
                        break;
 
+#if HAVE_STRCOLL
+               case SORT_LOCALE_STRING:
+                       ARRAYG(compare_func) = string_locale_compare_function;
+                       break;
+#endif
+
                case SORT_REGULAR:
                default:
                        ARRAYG(compare_func) = compare_function;

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

Reply via email to