Ordinare un array multidimensionale

  • Creatore Discussione Creatore Discussione Gae
  • Data di inizio Data di inizio

Gae

Utente Attivo
15 Mar 2021
55
4
8
Salve, ho un array multidimensionale che devo ordinare per una o più colonne
Pensavo di poter utilizzare array_multisort() ma non mi funziona, sicuramente sbaglio io qualcosa

Di seguito il codice
Codice:
$ga = array(
    array('id'=>1, 'nome'=>'Mario', 'cognome'=>'Rossi'),
    array('id'=>2, 'nome'=>'Paolo', 'cognome'=>'Bianchi'),
    array('id'=>3, 'nome'=>'Luca', 'cognome'=>'Neri'),
    array('id'=>4, 'nome'=>'Claudia', 'cognome'=>'Bianchi'),
);

$id = array_column($ga, 'id');
$no = array_column($ga, 'nome');
$co = array_column($ga, 'cognome');

Prova 1
$ga = array_multisort($id, SORT_DESC, $co, SORT_DESC, $no, SORT_ASC, $ga);

Prova 2
$ga = array_multisort( array_column($ga, 'id'), SORT_ASC, array_column($ga, 'cognome'), SORT_ASC, $ga);
 
vedi se ti garba
PHP:
require_once 'myUtils/show_vars.php';

$ga = array(
      array('id'=>1, 'nome'=>'Mario',   'cognome'=>'Rossi'),
      array('id'=>2, 'nome'=>'Paolo',   'cognome'=>'Bianchi'),
      array('id'=>3, 'nome'=>'Luca',    'cognome'=>'Neri'),
      array('id'=>4, 'nome'=>'Claudia', 'cognome'=>'Bianchi'),
);

echo "<h3>ga</h3>".show_var( $ga )."<br />";

foreach ($ga as $key => $row) {
    $sortKey[$key] = $ga[$key]['cognome'].$ga[$key]['nome'];
}
echo "<h3>sortKey</h3>".show_var( $sortKey )."<br />";

array_multisort($sortKey, SORT_DESC, $ga);    // ordine DESC per cognome nome

echo "<h3>sorted ga</h3>".show_var( $ga )."<br />";

1651407864470.png


ps, show_vars lo trovi negli snippets di php
 
  • Like
Reactions: Gae
Grazie, funziona e, tramite il tuo esempio, ho capito come si usa il multisort.
Una cortesia, ho provato a creare un indice con ID e Cognome ma m ritorna errore perchè i tipi di campo sono diversi
ID numerico, nome carattere
Ho provato anteponendo (str) ma non funziona
$sortKey[$key] = (str)$ga[$key]['ID'].$ga[$key][cognome'];
 

Discussioni simili