$pays=array(); $pays[]=Array('Canada',6,true,'Amérique'); $pays[]=Array('France',1,false,'Europe'); $pays[]=Array('Mexique',5,false,'Amérique'); $pays[]=Array('Espagne',2,false,'Europe'); $pays[]=Array('Angleterre',3,true,'Europe'); $pays[]=Array('Etats-Unis',4,false,'Amérique'); $pays[]=Array('Brésil',7,false,'Amérique'); foreach ($pays as $key => $tab_pays) { $continent[$key] = $tab_pays[3]; $nom_pays[$key] = $tab_pays[0]; } array_multisort($continent, SORT_ASC, $nom_pays, SORT_ASC, $pays);
<?php /* Class trouvée ici : http://www.php.net/manual/fr/function.usort.php Modifiée pour supporter les jeux de caractères avec accents */ class ObjSorter { var $property; var $sorted; var $order; function ObjSorter($objects_array,$property=null, $order="asc") { $order=strtoupper($order); switch($order) { case "DESC": break; default: $order="ASC"; break; } $this->order = $order; $sample = $objects_array[0]; $vars = get_object_vars($sample); if (isset($property)) { if (isset($sample->$property)) { $this->property = $property; usort($objects_array, array($this,'_compare')); } else { $this->sorted = false; return; } } else { list($property,$var) = each($sample); $this->property = $property; usort($objects_array, array($this,'_compare')); } $this->sorted = ($objects_array); } function _compare($apple, $orange) { $property = $this->property; if ($this->collatedLower($apple[$property]) == $this->collatedLower($orange[$property])) return 0; $order = $this->order; if($order=="DESC") return ($this->collatedLower($apple[$property]) > $this->collatedLower($orange[$property])) ? -1 : 1; return ($this->collatedLower($apple[$property]) < $this->collatedLower($orange[$property])) ? -1 : 1; } function collatedLower($string) { $string=strtolower($string); $patterns = array( "/á|à|â|ã|ä|å| Á|À|Â|Ã|Ä|Å/", "/æ|Æ/", "/ç|Ç/", "/é|è|ê|ë| É|È|Ê|Ë/", "/ì|í|î|ï| Ì|Í|Î|Ï/", "/ñ|Ñ/", "/ò|ó|ô|õ|ö|ø| Ò|Ó|Ô|Õ|Ö|Ø/", "/œ|Œ/", "/ß/", "/ù|ú|û|ü| Ù|Ú|Û|Ü/", "/ý|ÿ|Ý/"); $replace = array('a', 'ae', 'c', 'e', 'i', 'n', 'o', 'oe', 'ss', 'u', 'y'); return preg_replace($patterns,$replace,$string); } } $pays[]=Array('Canada',6,true,'Amérique'); $pays[]=Array('France',1,false,'Europe'); $pays[]=Array('Mexique',5,false,'Amérique'); $pays[]=Array('Espagne',2,false,'Europe'); $pays[]=Array('Angleterre',3,true,'Europe'); $pays[]=Array('Etats-Unis',4,false,'Amérique'); $pays[]=Array('Brésil',7,false,'Amérique'); $objects = new ObjSorter($pays,3, "ASC"); print_r($objects->sorted); /* Array ( [0] => Array ( [0] => Canada [1] => 6 [2] => 1 [3] => Amérique ) [1] => Array ( [0] => Mexique [1] => 5 [2] => [3] => Amérique ) [2] => Array ( [0] => Brésil [1] => 7 [2] => [3] => Amérique ) [3] => Array ( [0] => Etats-Unis [1] => 4 [2] => [3] => Amérique ) [4] => Array ( [0] => Espagne [1] => 2 [2] => [3] => Europe ) [5] => Array ( [0] => France [1] => 1 [2] => [3] => Europe ) [6] => Array ( [0] => Angleterre [1] => 3 [2] => 1 [3] => Europe ) ) */ ?>
<?php $pays[]=Array('Canada',6,true,'Amérique'); $pays[]=Array('France',1,false,'Europe'); $pays[]=Array('Mexique',5,false,'Amérique'); $pays[]=Array('Espagne',2,false,'Europe'); $pays[]=Array('Angleterre',3,true,'Europe'); $pays[]=Array('Etats-Unis',4,false,'Amérique'); $pays[]=Array('Brésil',7,false,'Amérique'); $objects = new ObjSorter($pays,3, "ASC"); $i=0; $temparr = array(); foreach($objects->sorted as $pays) { if(!isset($lastcont)) { $temparr[$i] = array(); $lastcont = $pays[3]; array_push($temparr[$i], $pays); } elseif($lastcont != $pays[3]) { $tmpobj = new ObjSorter($temparr[$i],0, "ASC"); $temparr[$i] = $tmpobj->sorted; $i++; $temparr[$i] = array(); array_push($temparr[$i], $pays); $lastcont = $pays[3]; } else { array_push($temparr[$i], $pays); } } $tmparray = array(); for($t=0; $t<=$i;$t++) { $tmparray = array_merge($tmparray, $temparr[$t]); } print_r($tmparray); /* Array ( [0] => Array ( [0] => Brésil [1] => 7 [2] => [3] => Amérique ) [1] => Array ( [0] => Canada [1] => 6 [2] => 1 [3] => Amérique ) [2] => Array ( [0] => Etats-Unis [1] => 4 [2] => [3] => Amérique ) [3] => Array ( [0] => Mexique [1] => 5 [2] => [3] => Amérique ) [4] => Array ( [0] => Espagne [1] => 2 [2] => [3] => Europe ) [5] => Array ( [0] => France [1] => 1 [2] => [3] => Europe ) [6] => Array ( [0] => Angleterre [1] => 3 [2] => 1 [3] => Europe ) ) */ ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question