array_multisort

(PHP 4, PHP 5, PHP 7, PHP 8)

array_multisortOrdina array multipli o multidimensionali

Descrizione

array_multisort(
    array &$array1,
    mixed $array1_sort_order = SORT_ASC,
    mixed $array1_sort_flags = SORT_REGULAR,
    mixed $... = ?
): bool

Array_multisort() Può essere usata per ordinare parecchi array allo stesso tempo, oppure un array multidimensionale, rispetto a una o più dimensioni.

Mantiene le chiavi associative (tipo string), mentre le chiavi numeriche vengono reindicizzate.

Elenco dei parametri

array1

L'array da ordinare.

array1_sort_order

L'ordinamento da applicare al precedente argomento array. Può essere SORT_ASC per un ordinamento crescente o SORT_DESC per un ordinamento decrescente.

Questo argomento può essere scambiato con array1_sort_flags o completamente omesso, nel qual caso si usa per default SORT_ASC.

array1_sort_flags

Opzioni di ordinamento per il precedente argomento array:

Flag di tipo:

  • SORT_REGULAR - confronta gli elementi in modo normale (non cambiare il tipo)
  • SORT_NUMERIC - confronta gli elementi numericamente
  • SORT_STRING - confronta gli elementi come stringhe
  • SORT_LOCALE_STRING - confronta gli elementi come stringhe, basandosi sull'attuale impostazione di localizzazione. Usa la localizzazione, che può essere cambiata con setlocale()
  • SORT_NATURAL - confronta gli elementi come stringhe usando l'"ordinamento naturale" come natsort()
  • SORT_FLAG_CASE - può essere combinato (OR binario) con SORT_STRING o SORT_NATURAL per ordinare le stringhe senza tener conte delle maiuscole/minuscole

Questo argomento può essere scambiato con array1_sort_order o completamente omesso, nel qual caso si usa per default SORT_REGULAR.

...

Altri array, opzionalmente seguiti da opzioni di ordinamento e flag di tipo.

Valori restituiti

Restituisce true in caso di successo, false in caso di fallimento.

Log delle modifiche

Versione Descrizione
5.4.0 Le costanti SORT_NATURAL e SORT_FLAG_CASE sonon state aggiunte a array1_sort_flags come flag di tipo.
5.3.0 La costante SORT_LOCALE_STRING è stata aggiunta a array1_sort_flags come flag di tipo.

Esempi

Example #1 Sorting multiple arrays

<?php
$ar1
= array("10", 100, 100, "a");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);
?>

In questo esempio, dopo l'ordinamento, il primo array conterrà 0, 10, 100, 100. Il secondo array conterrà 4, 1, 2, 3. Gli elementi del secondo array corrispondenti a quelli, identici, del primo array (100 e 100), vengono pure ordinati.

array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}

Example #2 Ordinamento di array multidimensionali

<?php
$ar
= array(
array(
"10", 11, 100, 100, "a"),
array(
1, 2, "2", 3, 1)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>

In questo esempio, dopo l'ordinamento, il primo array conterrà "10", 100, 100, 11, "a" (ordinato come stringhe ordine crescente), e il secondo conterrà 1, 3, "2", 2, 1 (ordinati come numeri, in ordine decrescente).

array(2) {
  [0]=> array(5) {
    [0]=> string(2) "10"
    [1]=> int(100)
    [2]=> int(100)
    [3]=> int(11)
    [4]=> string(1) "a"
  }
  [1]=> array(5) {
    [0]=> int(1)
    [1]=> int(3)
    [2]=> string(1) "2"
    [3]=> int(2)
    [4]=> int(1)
  }
}

Example #3 Ordinamento dei risultati di un database

In questo esempio, ogni elemento nell'array data rappresenta un record della tabella. Questo genere di dato è tipico dei record di database.

Esempio di dati:

volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7

I dati sono in un array, chiamato data. Di solito questo si ottiene ciclando, ad esempio, con mysql_fetch_assoc().

<?php
$data
[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>

In questo esempio ordineremo volume in senso discendente, edition in senso ascendente.

Abbiamo un array di record, ma array_multisort() richiede un array di colonne, quindi usiamo il codice qui sotto per ottenerlo, quindi eseguiremo l'ordinamento.

<?php
// Ottiene un array di colonne
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}

// Ordina 'volume' in senso discendente, 'edition' in senso ascendente
// Aggiungere $data come ultimo parametr per ordinare sulla chiave comune
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>

Il set di dati è ora ordinato, e apparirà così:

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

Example #4 Ordinamento senza distinzione tra maiuscole e minuscole

Sia SORT_STRING che SORT_REGULAR tengono conto delle maiuscole, le stringhe che iniziano con una maiuscola vengono prima di quelle che iniziano con una minuscola.

Per ottenere un ordinamento che ignori le maiuscole, forzarlo in modo che sia determnato da una copia dell'array originale formata da sole minuscole.

<?php
$array
= array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);

print_r($array);
?>

Il precedente esempio visualizzerà:

Array
(
    [0] => Alpha
    [1] => atomic
    [2] => bank
    [3] => Beta
)

Vedere anche: