Witam,
Mam mały problemik i prosiłbym o pomoc w jego rozwiązaniu:
o to kod problemu:
<?php
$a[0]['name'] = 'Alfa';
$a[1]['name'] = 'Beta';
$a[2]['name'] = 'Gamma';
$a[3]['name'] = 'Delta';
$a[4]['name'] = 'Omega';
$a[5]['name'] = 'Pi';
$a[6]['name'] = 'Tau';
$a[7]['name'] = 'Epsilon';
$a[8]['name'] = 'Sigma';
$a[9]['name'] = 'Lambda';
$a[0]['num1'] = rand(0
,9
); $a[1]['num1'] = rand(0
,9
); $a[2]['num1'] = rand(0
,9
); $a[3]['num1'] = rand(0
,9
); $a[4]['num1'] = rand(0
,9
); $a[5]['num1'] = rand(0
,9
); $a[6]['num1'] = rand(0
,9
); $a[7]['num1'] = rand(0
,9
); $a[8]['num1'] = rand(0
,9
); $a[9]['num1'] = rand(0
,9
);
$a[0]['num2'] = rand(0
,9
); $a[1]['num2'] = rand(0
,9
); $a[2]['num2'] = rand(0
,9
); $a[3]['num2'] = rand(0
,9
); $a[4]['num2'] = rand(0
,9
); $a[5]['num2'] = rand(0
,9
); $a[6]['num2'] = rand(0
,9
); $a[7]['num2'] = rand(0
,9
); $a[8]['num2'] = rand(0
,9
); $a[9]['num2'] = rand(0
,9
);
$a[0]['num3'] = $a[0]['num1'] + $a[0]['num2'];
$a[1]['num3'] = $a[1]['num1'] + $a[1]['num2'];
$a[2]['num3'] = $a[2]['num1'] + $a[2]['num2'];
$a[3]['num3'] = $a[3]['num1'] + $a[3]['num2'];
$a[4]['num3'] = $a[4]['num1'] + $a[4]['num2'];
$a[5]['num3'] = $a[5]['num1'] + $a[5]['num2'];
$a[6]['num3'] = $a[6]['num1'] + $a[6]['num2'];
$a[7]['num3'] = $a[7]['num1'] + $a[7]['num2'];
$a[8]['num3'] = $a[8]['num1'] + $a[8]['num2'];
$a[9]['num3'] = $a[9]['num1'] + $a[9]['num2'];
/*
lp name num1 num2
1. Gamma 3 6
2. Omega 3 4
3. Alfa 3 3
4. Delta 2 4
5. Beta 1 1
*/
$p=0;
$sortuj[$p]['name'] = "num3";
$sortuj[$p]['sort'] = "DESC";
$sortuj[$p++]['case'] = TRUE;
$sortuj[$p]['name'] = "num2";
$sortuj[$p]['sort'] = "DESC";
$sortuj[$p++]['case'] = TRUE;
$sortuj[$p]['name'] = "num1";
$sortuj[$p]['sort'] = "DESC";
$sortuj[$p++]['case'] = TRUE;
$sortuj[$p]['name'] = "name";
$sortuj[$p]['sort'] = "ASC";
$sortuj[$p++]['case'] = FALSE;
function sortx
(&$tablica, $sort = array()) {
$function = '';
while (list
($key) = each($sort)) {
if (isset($sort[$key]['case']) && ($sort[$key]['case'] == TRUE)) $function .= 'if (strtolower($a["'.$sort[$key]['name'].'"])<>strtolower($b["'.$sort[$key]['name'].'"])) { return (strtolower($a["'.$sort[$key]['name'].'"]) '; else $function .= 'if ($a["'.$sort[$key]['name'].'"]<>$b["'.$sort[$key]['name'].'"]) { return ($a["'.$sort[$key]['name'].'"] ';
if (isset($sort[$key]['sort']) && ($sort[$key]['sort'] == "DESC")) $function .= '<'; else $function .= '>';
if (isset($sort[$key]['case']) && ($sort[$key]['case'] == TRUE)) $function .= ' strtolower($b["'.$sort[$key]['name'].'"])) ? 1 : -1; } else'; else $function .= ' $b["'.$sort[$key]['name'].'"]) ? 1 : -1; } else';
}
$function .= ' { return 0; }';
usort($tablica, create_function
('$a, $b', $function)); }
$p=0;
$str2 = $str3 = '';
$str1 = '<table><tr><th>lp</th><th>Name</th>
<th>Num1</th><th>Num2</th><th>Num3</th>';
sortx($a, $sortuj);
while (list
($key, $value) = each($a)) {
$p++;
if ($p<=5) $str2.= "<tr style='background: #fcc;'><td>{$p}</td><td><strong>{$value['name']}</strong></td>
<td>{$value['num1']}</td><td>{$value['num2']}</td><td>{$value['num3']}</td>";
else $str3 .= "<tr style='background: #ccc;'><td>{$p}</td><td><strong>{$value['name']}</strong></td>
<td>{$value['num1']}</td><td></td><td>{$value['num1']}</td>";
}
$str4 = "</td></tr></foot></table>";
echo $str1.$str2.$str3.$str4;
?>
Działający kod znajduje się tutaj:
http://www.swos.pl/temp/sortowanie.phpWizja moja jest następująca:
Cała lista jest sortowane wg. wartości NUM3, ale tylko dla pierwszych 5 NAJWYŻSZYCH wartości, a potem jest sortowanie wg. NUM1.
W tej chwili wyniki są w połowie spaczone.
Gdyż sortuje wg. NUM3, ale sortowanie wg. NUM1 nie działa, a nie można zrobić żeby sortowało najpierw wg. NUM1, bo wteyd zostaną spaczone wyniki NUM3(suma NUM1 i NUM2)
Jakie będzie najlepsze rozwiązanie ? Moje pomysły zawodzą.
Ten post edytował Tomplus 28.07.2008, 13:08:01