PHP: Sorting a Multi-Dimensional Array

titolo in italiano:

Ordinamento di un array-multidimensionale in PHP

Oggi ho avuto la necessità di ordinare un array multidimensionale in PHP; un array di array in questo formato:

1
2
3
4
5
6
7
8
9
//an array of some songs I like
$songs =  array(
'1' => array('artist'=>'The Smashing Pumpkins', 
'songname'=>'Soma'),
'2' => array('artist'=>'The Decemberists', 
'songname'=>'The Island'),
'3' => array('artist'=>'Fleetwood Mac', 
'songname' =>'Second-hand News')
);

Sempre per il principio di non re-inventare la ruota, googlando un pò è saltata fuori questa funzione su firsttube:

Tuttavia a me serviva qualcosa di un pò più evoluto, che mi consentisse non solo di scegliere la chiave dell’array sulla quale ordinare, ma anche il verso dell’ordinamento.

1
2
3
4
5
6
7
8
9
10
11
12
13
function subval_sort($a,$subkey) 
 {
  foreach($a as $k=>$v) {
    $b[$k] = strtolower($v[$subkey]);
  }
  asort($b);
 
  foreach($b as $key=>$val) 
  {
    $c[] = $a[$key];
  }
  return $c;
}

Di seguito la mia estensione:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function subval_sort($a,$subkey,$sortOrder) 
 {
  foreach($a as $k=>$v) {
    $b[$k] = strtolower($v[$subkey]);
  }
  if($sortOrder == "asc")
    asort($b);
  else if($sortOrder == "desc")
    arsort($b);
  foreach($b as $key=>$val) 
  {
    $c[] = $a[$key];
  }
  return $c;
}

Related Posts: