ID: 47481 User updated by: carsten_sttgt at gmx dot de Reported By: carsten_sttgt at gmx dot de Status: Open Bug Type: Strings related Operating System: * PHP Version: 5.2.8 New Comment:
> The strnatcmp uses the zend_parse_paramters function to parse > the function parameters. Ah, ok, I_m not familiar with the PHP/Zend internals (or C...). Just a question about the difference between natsort() and asort(). Should they not work in the same way if you have an array without numbers in the key values? And if I look into array.c, PHP_FUNCTION(asort) is also using zend_parse_parameters. e.g. IMHO this script should result in 2 times the same output: <?php $datensort = $datennat = $daten = array( 'Süden','spielen','Sonne','Wind','Regen','Meer' ); natsort($datennat); print_r($datennat); asort($datensort); print_r($datensort); ?> Regards, Carsten Previous Comments: ------------------------------------------------------------------------ [2009-03-03 05:06:31] hrad...@php.net The strnatcmp uses the zend_parse_paramters function to parse the function parameters. The zend_parse_parameters function converts the string from php space into a char. Seeing as how this is a core function, I doubt this will be fixed soon. I may be completely off base, so I will leave this bug open in case someone else wants to comment. ------------------------------------------------------------------------ [2009-02-23 13:40:21] carsten_sttgt at gmx dot de Description: ------------ Hello, why is the nat_char defined as char instead of unsigned char? char limit us (and a correct sorting) to ASCII 0-127. With a unsigned char (ASCII 0-255) the sorting is "correct" for all single byte charsets like iso-8850-1 (which is the default in PHP). Internally the function is already doing a cast to unsigned char many times (but not in the main comparison). In the original header (strnatcmp.h) from the author, the typedef for nat_char is also only a hint. Regards, Carsten Reproduce code: --------------- <?php $daten = array('Süden','spielen','Sonne','Wind','Regen','Meer'); natcasesort($daten); print_r($daten); ?> Expected result: ---------------- Array ( [5] => Meer [4] => Regen [2] => Sonne [1] => spielen [0] => Süden [3] => Wind ) Actual result: -------------- Array ( [5] => Meer [4] => Regen [0] => Süden [2] => Sonne [1] => spielen [3] => Wind ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47481&edit=1