Array multisort()

Från Wiki.linux.se
Version från den 11 augusti 2024 kl. 05.24 av Admin (diskussion | bidrag)
Hoppa till navigering Hoppa till sök

array_multisort

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

array_multisort — Sorterar flera eller flerdimensionella arrayer

Beskrivning

array_multisort(

   array &$array1,
   mixed $array1_sort_order = SORT_ASC,
   mixed $array1_sort_flags = SORT_REGULAR,
   mixed ...$rest

): bool array_multisort() kan användas för att sortera flera arrayer samtidigt eller en flerdimensionell array efter en eller flera dimensioner.

Associativa (sträng) nycklar kommer att bibehållas, men numeriska nycklar kommer att återindexeras.

Notera:

Om två element jämförs som lika behåller de sin ursprungliga ordning. Före PHP 8.0.0 var deras relativa ordning i den sorterade arrayen odefinierad.

Notera:

Återställer arrayens interna pekare till det första elementet.

Parametrar

array1
En array som sorteras.
array1_sort_order
Den ordning som används för att sortera det föregående arrayargumentet. Antingen SORT_ASC för att sortera stigande eller SORT_DESC för att sortera fallande.

Detta argument kan bytas ut mot array1_sort_flags eller utelämnas helt, i vilket fall SORT_ASC antas.

array1_sort_flags
Sorteringsalternativ för det föregående arrayargumentet:

Sorteringstypflaggor:

  • SORT_REGULAR - jämför objekt normalt (ändra inte typer)
  • SORT_NUMERIC - jämför objekt numeriskt
  • SORT_STRING - jämför objekt som strängar
  • SORT_LOCALE_STRING - jämför objekt som strängar, baserat på aktuell lokal inställning. Använder lokalinställningen, som kan ändras med setlocale()
  • SORT_NATURAL - jämför objekt som strängar med "naturlig ordning" som natsort()
  • SORT_FLAG_CASE - kan kombineras (bitvis OR) med SORT_STRING eller SORT_NATURAL för att sortera strängar utan att skilja på stora och små bokstäver

Detta argument kan bytas ut mot array1_sort_order eller utelämnas helt, i vilket fall SORT_REGULAR antas.

rest
Fler arrayer, eventuellt följt av sorteringsordning och flaggor. Endast element som motsvarar motsvarande element i tidigare arrayer jämförs. Med andra ord är sorteringen lexicografisk.

Returvärden

Returnerar true vid framgång eller false vid misslyckande.

Exempel

Exempel #1 Sortera flera arrayer

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

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

I detta exempel kommer den första arrayen att innehålla 0, 10, 100, 100 efter sorteringen. Den andra arrayen kommer att innehålla 4, 1, 2, 3. Posterna i den andra arrayen som motsvarar de identiska posterna i den första arrayen (100 och 100) sorterades också.

Exempel #2 Sortera en flerdimensionell array

<?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);
?>

I detta exempel kommer den första arrayen att transformeras till "10", 100, 100, 11, "a" (den sorterades som strängar i stigande ordning). Den andra kommer att innehålla 1, 3, "2", 2, 1 (sorterade som nummer, i fallande ordning).

Se även

usort() - Sorterar en array efter värden med en användardefinierad jämförelsefunktion
Jämförelse av arraysorteringsfunktioner