|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2001-08-19 18:57 UTC] kzi at gmx dot net
If asort() is used with the sort flag SORT_NUMERIC and the values ar non numeric, the sort order of those values should remain unchanged in principle. But in arrays with few of such non numeric items (app. < 10), the first item is generally moved to the bottom, while in arrays with more items, one element from somewhere in the middle is moved to the top. example: $q = array(1=>'A',2=>'B',3=>'C',4=>'D',5=>'E'); asort($q,SORT_NUMERIC); produces the value sequence B,C,D,E,A PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 23:00:01 2025 UTC |
I've also encountered this problem. Version: PHP Version 4.2.3 Environment: FreeBSD 4.7-PRERELEASE #1: Mon Sep 2 12:14:18 IST 2002 Configure Command: './configure' '--with-apxs=/usr/local/sbin/apxs' '--with-config-file-path=/usr/local/etc' '--enable-versioning' '--with-regex=system' '--without-gd' '--without-mysql' '--with-mhash=/usr/local' '--with-pgsql=/usr/local' '--with-ldap=/usr/local' '--enable-xslt' '--with-xslt-sablot=/usr/local' '--enable-trans-sid' '--with-expat-dir=/usr/local' '--with-iconv=/usr/local' '--prefix=/usr/local' 'i386-portbld-freebsd4.7' (built from FreeBSD ports collection) Testcase: // create an array $array = array(); for ($i = 1; $i < 25; $i++) { array_push($array,"Dublin $i"); } // randomise it $rand_array = array(); srand ((float) microtime() * 10000000); foreach (array_rand($array,sizeof($array)) as $index) { array_push($rand_array,$array[$index]); } // get it sorted by string $array_sorted_str = $rand_array; sort($array_sorted_str,SORT_STRING); // get it sorted numerically $array_sorted_num = $rand_array; sort($array_sorted_num,SORT_NUMERIC); echo "Original array"; echo "<ul>"; foreach ($array as $v) { echo "<li>$v</li>"; } echo "</ul>"; echo "Randomised array"; echo "<ul>"; foreach ($rand_array as $v) { echo "<li>$v</li>"; } echo "</ul>"; echo "array sorted by string"; echo "<ul>"; foreach ($array_sorted_str as $v) { echo "<li>$v</li>"; } echo "</ul>"; echo "array sorted numerically"; echo "<ul>"; foreach ($array_sorted_num as $v) { echo "<li>$v</li>"; } echo "</ul>"; I would expect the numeric sort to give me Dublin 1, Dublin 2...Dublin 11,Dublin 12...Dublin 20 etc. While it does change the array, it appears to do so in a random fashion (at least I cannot understand it). Tadgh