[php]sort array (multi dimensies)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi ik wil een array sorten. Met array_multisort kom ik er niet echt uit. Ben bang
dat er niet een hele snelle oplossing is en dat ik wat vernuftiger moet gaan aanpakken.

Ik wil dus dat array 0 1 2 3 worden gesorteerd alfabetisch op [company_name]

Deze:
Array (
[0] => Array ( [idprofile] => 59 [nlgb] => 1 [isEnglish] => [company_name] => aaaaa )
[1] => Array ( [idprofile] => 86 [nlgb] => 1 [isEnglish] => [company_name] => dddddd)
[2] => Array ( [idprofile] => 22 [nlgb] => 1 [isEnglish] => [company_name] => bbbbb )
[3] => Array ( [idprofile] => 8 [nlgb] => 1 [isEnglish] => [company_name] => ccccc )
)


Moet dus deze worden:

Array (
[0] => Array ( [idprofile] => 59 [nlgb] => 1 [isEnglish] => [company_name] => aaaaa )
[2] => Array ( [idprofile] => 22 [nlgb] => 1 [isEnglish] => [company_name] => bbbbb )
[3] => Array ( [idprofile] => 8 [nlgb] => 1 [isEnglish] => [company_name] => ccccc )
[1] => Array ( [idprofile] => 86 [nlgb] => 1 [isEnglish] => [company_name] => dddddd)


)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

usort()

als je indices belangrijk zijn eventueel uasort()

[ Voor 38% gewijzigd door crisp op 26-02-2007 23:33 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Funcie in "comments" werkt:

/ Based on the other notes given before.
// Sorts an array (you know the kind) by key
// and by the comparison operator you prefer.

// Note that instead of most important criteron first, it's
// least important criterion first.

// The default sort order is ascending, and the default sort
// type is strnatcmp.

// function multisort($array[, $key, $order, $type]...)
function multisorteer($array)
{
for($i = 1; $i < func_num_args(); $i += 3)
{
$key = func_get_arg($i);

$order = true;
if($i + 1 < func_num_args())
$order = func_get_arg($i + 1);

$type = 0;
if($i + 2 < func_num_args())
$type = func_get_arg($i + 2);

switch($type)
{
case 1: // Case insensitive natural.
$t = 'strcasenatcmp($a[' . $key . '], $b[' . $key . '])';
break;
case 2: // Numeric.
$t = '$a[' . $key . '] - $b[' . $key . ']';
break;
case 3: // Case sensitive string.
$t = 'strcmp($a[' . $key . '], $b[' . $key . '])';
break;
case 4: // Case insensitive string.
$t = 'strcasecmp($a[' . $key . '], $b[' . $key . '])';
break;
default: // Case sensitive natural.
$t = 'strnatcmp($a[' . $key . '], $b[' . $key . '])';
break;
}

uasort($array, create_function('$a, $b', 'return ' . ($order ? '' : '-') . '(' . $t . ');'));
}

return $array;
}


$vacsArr = multisorteer($vacsArr, "'company_name'", true, 0);