Benytte array_multisort til at sub sortere.
GoddagJeg forsøger at lave mig en multi-kolonne-liste med flere ting der kan sorteres efter. Den ser sådan her ud:
USER AGE ONLINE
niels 22 no
hans 34 no
Camilla 18 no
Jeppe 18 yes
Klaus 50 no
Anne 18 no
Tina 18 yes
Den skal så kunne sortes efter f.eks ONLINE, AGE og så USER:
USER AGE ONLINE
Jeppe 18 yes
Tina 18 yes
Anne 18 no
Camilla 18 no
niels 22 no
hans 34 no
Klaus 50 no
Til det har jeg brugt array_multisort. Men det duer bare ikke.
Mit kald af funktionen ser således ud:
$a = array();
foreach($sort_list_users_classes as $key => $obj) {
$a[] = $obj -> getSORTarr();
}
$a_list_num = count($a);
if($a_list_num>0) {
switch($a_list_num) {
case 1:
array_multisort($a[0]);
break;
case 2:
array_multisort($a[0], $a[1]);
break;
case 3:
array_multisort($a[0], $a[1], $a[2]);
break;
case 4:
array_multisort($a[0], $a[1], $a[2], $a[3]);
break;
case 5:
default:
array_multisort($a[0], $a[1], $a[2], $a[3], $a[4]);
break;
}
} else echo "Hva' hulen!";
Mine klasser arver fra sortListItem som ser sådan her ud:
class SortListItem {
var $type, $data, $vals, $sortValArr, $echoValArr;
function SortListItem($type, $data) {
$this -> type = $type;
$this -> data = $data;
$this -> vals = array();
$this -> sortValArr = array();
$this -> echoValArr = array();
}
function getTYPE() {
return $this -> type;
}
function getSORTarr() {
return $this -> sortValArr;
}
function getSORTitem($id) {
return $this -> sortValArr[$id];
}
function getECHOarr() {
return $this -> echoValArr;
}
function getECHOitem($id) {
return $this -> echoValArr[$id];
}
function initArrays($idArr) {
$foo = "bar";
}
}
Et eksempel på en child klasse er sortListOnline:
class SortListOnline extends SortListItem {
var $type, $data, $vals, $sortValArr, $echoValArr;
function SortListOnline($data) {
parent :: SortListItem("online", $data);
}
function initArrays($idArr) {
$user_online_tab = $this -> data -> getTable("user_online");
foreach($user_online_tab as $rows) {
foreach($idArr as $id) {
if($rows["user_id"]==$id) {
$this -> sortValArr["key_$id"] = 0;
$this -> echoValArr["key_$id"] = "<span style=\"color:#00ff00;font-weight:bold;\">JA</span>";
}
}
}
foreach($idArr as $id) {
if(!isset($this -> sortValArr["key_$id"])) {
$this -> sortValArr["key_$id"] = 1;
$this -> echoValArr["key_$id"] = "<span style=\"color:#ff0000;font-weight:bold;\">NEJ</span>";
}
}
}
}
Kun den første af de kolonner der er i brug bliver sorteret. Dvs. jeg kan sortere efter alle tre men ikke subsortere efter nogle af dem.
Hvad skal der ændres ved?
Tak
Forresten ser mine echos sådan her ud:
$mykeys = array_keys($a[0]);
foreach($mykeys as $keykeykey) {
echo "\t<tr>\n";
echo "\t\t<td style=\"background:".$color1.";text-align:right;border-left:1px solid #000000;\">".$i."</td>\n";
echo "\t\t<td style=\"background:#66cc99;border-left:1px solid #000000;\"> </td>\n";
$j= 2;
foreach($sort_list_users_cols as $val2) {
if($col_exists[$val2]) {
foreach($sort_list_users_classes as $obj) {
if($obj -> getTYPE() == $val2) {
$color3 = ($j % 2 == 0) ? $color2 : $color1;
$value2echo = $obj -> getECHOitem($keykeykey);
if(trim($value2echo)=="") $value2echo = " ";
echo "\t\t<td style=\"background:".$color3.";border-left:1px solid #000000;\">".$value2echo."</td>\n";
$j++;
}
}
}
}
echo "\t\t<td style=\"border-left:1px solid #000000;\"> </td>\n";
echo "\t</tr>\n";
$i++;
$color3 = $color1;
$color1 = $color2;
$color2 = $color3;
}