par
titerm » 12 mars 2007, 17:17
Pk pas... mais c'est toujours aussi compliqué...

))
En plus, ca ne marchera pas si le tri a lieu sur une chaine. En l'occurence, un tri par lieu ou description ici...
Quitte a faire compliqué, voila une version objet qui trie aussi les strings
class mySort {
const ASC = 1 ;
const DSC = -1;
static private $field;
static private $order;
static private function usort($a, $b) {
if(is_numeric($a) && is_numeric($b)) {
return ($a[self::$field] - $b[self::$field]) * self::$order;
}
return strcmp($a[self::$field],$b[self::$field]) * self::$order;
}
static private function setSort($f, $o) {
self::$field = $f;
self::$order = $o;
}
static public function sort(&$data, $field, $order=self::ASC) {
self::setSort($field,$order);
uasort($data,array('mySort','usort'));
}
}
$foo = array (
1=> array('age' => 30,'poids'=>60,'prenom'=>'joe'),
2=> array('age' => 50,'poids'=>66,'prenom'=>'bill'),
3=> array('age' => 50,'poids'=>55,'prenom'=>'tom'),
4=> array('age' => 10,'poids'=>55,'prenom'=>'joe'),
);
print_r($foo);
mySort::Sort($foo,'prenom',mySort::DSC);
print_r($foo);
mySort::Sort($foo,'age');
print_r($foo);
Pk pas... mais c'est toujours aussi compliqué... :)))
En plus, ca ne marchera pas si le tri a lieu sur une chaine. En l'occurence, un tri par lieu ou description ici...
Quitte a faire compliqué, voila une version objet qui trie aussi les strings
[php]
class mySort {
const ASC = 1 ;
const DSC = -1;
static private $field;
static private $order;
static private function usort($a, $b) {
if(is_numeric($a) && is_numeric($b)) {
return ($a[self::$field] - $b[self::$field]) * self::$order;
}
return strcmp($a[self::$field],$b[self::$field]) * self::$order;
}
static private function setSort($f, $o) {
self::$field = $f;
self::$order = $o;
}
static public function sort(&$data, $field, $order=self::ASC) {
self::setSort($field,$order);
uasort($data,array('mySort','usort'));
}
}
$foo = array (
1=> array('age' => 30,'poids'=>60,'prenom'=>'joe'),
2=> array('age' => 50,'poids'=>66,'prenom'=>'bill'),
3=> array('age' => 50,'poids'=>55,'prenom'=>'tom'),
4=> array('age' => 10,'poids'=>55,'prenom'=>'joe'),
);
print_r($foo);
mySort::Sort($foo,'prenom',mySort::DSC);
print_r($foo);
mySort::Sort($foo,'age');
print_r($foo);
[/php]