|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2010-03-10 16:11 UTC] peter at f-is dot eu
[2010-03-11 14:06 UTC] kanea at free dot fr
[2014-07-13 13:08 UTC] datibbaw@php.net
-Package: Arrays related
+Package: Documentation problem
[2016-06-25 14:42 UTC] cmb@php.net
[2016-06-25 14:42 UTC] cmb@php.net
-Status: Open
+Status: Closed
-Type: Feature/Change Request
+Type: Documentation Problem
-Package: Documentation problem
+Package: Arrays related
-Assigned To:
+Assigned To: cmb
[2016-06-25 14:42 UTC] cmb@php.net
[2020-02-07 06:07 UTC] phpdocbot@php.net
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Dec 21 01:00:01 2025 UTC |
Description: ------------ on an array with collection of the same object the object have 2 property a et b Exemple: [ object:{a=3, b=2} object:{a=0, b=2} object:{a=2, b=3} object:{a=1, b=2} If you make a first sort with the good fonction and usort on property a, you obtain [ object:{a=0, b=2} object:{a=1, b=2} object:{a=2, b=3} object:{a=3, b=2} ] The result is that you intend Now if you make a second sort with another function and usort on property b, you obtain [ object:{a=3, b=2} object:{a=1, b=2} object:{a=0, b=2} object:{a=2, b=3} ] The result is not you can wait. I think that's because the read of the array is make in inverse way. A possible solution is to mark the placed elements. And not move elements not tested before or after them the marked element. Best Regards Test script: --------------- <?php function compa($a, $b){ if($a['a']>$b['a']) return 1; else return ($a['a']<$b['a'])?-1:0; } function compb($a, $b){ if($a['b']>$b['b']) return 1; else return ($a['b']<$b['b'])?-1:0; } $a = array(array('a'=>1, 'b'=>2), array('a'=>2, 'b'=>3), array('a'=>3, 'b'=>2), array('a'=>0, 'b'=>2), array('a'=>4, 'b'=>2)); usort($a, 'compa'); print_r($a); usort($a, 'compb'); print_r($a); ?> Expected result: ---------------- Array ( [0] => Array ( [a] => 0 [b] => 2 ) [1] => Array ( [a] => 1 [b] => 2 ) [2] => Array ( [a] => 3 [b] => 2 ) [3] => Array ( [a] => 2 [b] => 3 ) ) Actual result: -------------- Array ( [0] => Array ( [a] => 3 [b] => 2 ) [1] => Array ( [a] => 1 [b] => 2 ) [2] => Array ( [a] => 0 [b] => 2 ) [3] => Array ( [a] => 2 [b] => 3 ) )