note 39746 added to function.uksort

From: Date: Mon, 09 Feb 2004 15:03:25 +0000
Subject: note 39746 added to function.uksort
Groups: php.notes 
Request: Send a blank email to php-notes+get-64890@lists.php.net to get a copy of this message
The code below allows you to sort an array_A following array_B keys order, original keys and values remain associated. <? //main function Function SortArrayAKeysLikeArrayBKeys(&$TheArrayToSort){ uksort($TheArrayToSort,"SortArrayAKeysLikeArrayBKeys_cmp"); } //the custom compare function Function SortArrayAKeysLikeArrayBKeys_cmp($a,$b){ global $TheArrayOrder; $PosA=KeyPosInArray($a,$TheArrayOrder); $PosB=KeyPosInArray($b,$TheArrayOrder); if ($PosA==$PosB){return 0;}else{return ($PosA > $PosB ? 1 : -1);} } //where is my key in my array Function KeyPosInArray($Key,$Array){ $i=0; $Pos=99999999; if($Array){ foreach($Array as $K => $V){ $i++; if($K==$Key){ $Pos=$i; break; } } } return $Pos; } //the array you want to sort $AnyArrayToSort['age']='19'; $AnyArrayToSort['ville']='rennes'; $AnyArrayToSort['website']='kik-it.com'; $AnyArrayToSort['region']='bretagne'; $AnyArrayToSort['code_postal']='35200'; $AnyArrayToSort['Nom']='Fred'; //the array with the correct keys/values order $TheArrayOrder['Nom']='Whatever'; $TheArrayOrder['age']='Anything'; $TheArrayOrder['region']='What u want'; $TheArrayOrder['ville']='Something'; $TheArrayOrder['code_postal']='Nothing'; //before sort print_r($AnyArrayToSort); echo "<br>"; //we sort SortArrayAKeysLikeArrayBKeys($AnyArrayToSort); echo "<br>"; //after sort print_r($AnyArrayToSort); ?> Will print : Array ( [age] => 19 [ville] => rennes [website] => kik-it.com [region] => bretagne [code_postal] => 35200 [Nom] => Fred ) Array ( [Nom] => Fred [age] => 19 [region] => bretagne [ville] => rennes [code_postal] => 35200 [website] => kik-it.com ) The keys not listed in the $TheArrayOrder will appear at the end of your sorted array (only if Key Pos < 99999999 ;o) ---- Manual Page -- http://www.php.net/manual/en/function.uksort.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+39746 Delete -- http://master.php.net/manage/user-notes.php?action=delete+39746&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+39746&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#64890) next »