ID: 21728 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] Status: Open Bug Type: Documentation problem Operating System: All PHP Version: 4.4.0-dev New Comment:
Maybe it should not happen but the as I said the comparisons done are correct (extensive type juggling). Maybe SORT_REGULAR is not the way to sort (by default) but SORT_STRING. Comments from other people are welcome :) Previous Comments: ------------------------------------------------------------------------ [2003-01-18 12:17:00] [EMAIL PROTECTED] I swear I get different results by just adding a "d" to the end. This should not happen. ------------------------------------------------------------------------ [2003-01-18 12:05:10] [EMAIL PROTECTED] As I said this is very complicated case because of the type juggling. I needed 30 minute to realize that 21444 is not a bug but a bogus (for me and Derick). I agree that the result is weird. I modified the the compare function to see what comparisons are made. All of them look ok. On my php I have the same results on the script with "d" added at the end. A little modification changes the order of comparisons and thus the result is different. Maybe this is because the default sort type is SORT_REGULAR. If SORT_STRING is used the result is expected. I think that the case I provided is good to show the users that the results are kinda unexpected when both the array contains values from various datatypes and SORT_REGULAR is used. So if the users use such array they have to be warned of the "unexpected" results. ------------------------------------------------------------------------ [2003-01-18 11:48:56] [EMAIL PROTECTED] How about: <?php $arr1 = array("a","b","4",5,4,"true","TRUE",true, false, "c"); sort($arr1); var_dump($arr1); ?> Which gives: array(10) { [0]=> bool(false) [1]=> string(4) "TRUE" [2]=> string(1) "a" [3]=> string(4) "true" [4]=> bool(true) [5]=> string(1) "b" [6]=> string(1) "c" [7]=> int(4) [8]=> string(1) "4" [9]=> int(5) } Which is weird as "4" looks misplaced. For example in this: <?php $arr1 = array("a","b","4",5,4,"true","TRUE",true, false, "c", "d"); sort($arr1); var_dump($arr1); ?> We get different results (all I added was "d" to the end): array(11) { [0]=> bool(false) [1]=> string(1) "4" [2]=> string(4) "TRUE" [3]=> string(1) "a" [4]=> string(1) "b" [5]=> string(1) "c" [6]=> string(1) "d" [7]=> string(4) "true" [8]=> bool(true) [9]=> int(4) [10]=> int(5) } Notice the different order, is this a genuine bug? ------------------------------------------------------------------------ [2003-01-18 10:26:27] [EMAIL PROTECTED] Today I closed bug #21444. The user has to master the type juggling to know the expected output. I think that it is good idea to add it's example as comprehensive one. The script goes here (the explanation is after it) : <?php $arr1 = array("a","b","c","d","4",5,4,"true","TRUE",true); sort($arr1); var_dump($arr1); ?> The output is : array(10) { [0]=> bool(true) [1]=> int(4) [2]=> string(1) "4" [3]=> string(4) "TRUE" [4]=> string(1) "a" [5]=> string(1) "b" [6]=> string(1) "c" [7]=> string(1) "d" [8]=> string(4) "true" [9]=> int(5) } It may look strange - why (int)5 is after all the strings. This is because "4" is lower than (int) 5, "4" is before "true" and "true" is before 5. The first 2 are obvious, the third one is not. But it is ok. It's better not to mix types in the array. If 5 is changed to "5" then "5" goes right after "4". Thanks ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=21728&edit=1 -- PHP Documentation Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php