$array = array('Olsson;Andrew;90807060;31',
'Gustavsson;Paul;88332233;28',
'Anderson;Morten;22332233;24',
'Hansen;Hanna;44556677;22',
'Carlton;Maria;22113322;21',
'Henriksen;Mona;66778899;25',
'Tangstad;Tina;11223344;19');
$heading = array('lastname', 'firstname', 'phone', 'age');
foreach ($array as $key => $val) {
$tmp = explode(';', $val);
foreach ($heading as $h_key => $h_val) {
$new_arr[$key][$h_val] = $tmp[$h_key];
}
}
if (isset($_GET['sorting'])) {
masort($new_arr, $_GET['sorting']);
}
echo '<table border="1" cellpadding="4" cellspacing="0"><tr>';
foreach($heading as $value) {
echo '<td><a href="' . $_SERVER['PHP_SELF'] .
'?sorting=' . $value . '">' .
ucfirst($value) . '</a></td>';
}
echo '</tr>';
foreach ($new_arr as $val) {
echo '<tr>';
foreach ($val as $item) {
echo '<td>' . $item . '</td>';
}
echo '</tr>';
}
echo '</table>';
// masort() function courtesy of rlynch
// posted to php.net users' notes for uasort()
// php.net/manual/en/function.uasort.php
function masort(&$data, $sortby)
{
static $sort_funcs = array();
if (empty($sort_funcs[$sortby])) {
$code = "\$c=0;";
foreach (split(',', $sortby) as $key) {
$array = array_pop($data);
array_push($data, $array);
if(is_numeric($array[$key])) {
$code .= "if ( \$c = ((\$a['$key'] == \$b['$key'])
? 0: ((\$a['$key'] < \$b['$key'])
? -1 : 1 )) ) return \$c;";
} else {
$code .= "if ( (\$c = strcasecmp(\$a['$key'],
\$b['$key'])) != 0 ) return \$c;\n";
}
}
$code .= 'return $c;';
$sort_func = $sort_funcs[$sortby] = create_function('$a, $b', $code);
} else {
$sort_func = $sort_funcs[$sortby];
}
$sort_func = $sort_funcs[$sortby];
uasort($data, $sort_func);
}