Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Sfat
  • Sortarea unei matrice alfabetic php. Sortarea unei matrice în php

Sortarea unei matrice alfabetic php. Sortarea unei matrice în php

Ultima actualizare: 1/11/2015

funcția is_array

Funcția is_array() verifică dacă o variabilă este o matrice, iar dacă este, returnează adevărat, în caz contrar returnează false. De exemplu:

$isar = is_array($technics); echo ($isar==true)?"this is an array":"aceasta nu este o matrice";

numărul/mărimea funcțiilor

Funcțiile count() și sizeof() obțin numărul de elemente dintr-o matrice:

$numar = count($tehnica); // la fel ca // $număr = dimensiunea($tehnică); echo "În tabloul technics există $număr de elemente";

funcții de amestecare

Funcția de amestecare amestecă aleatoriu elementele matricei:

$os = array("Windows 95", "Windows XP", "Windows Vista", "Windows 7", "Windows 8", "Windows 10"); amestecare($os); print_r($os); // una dintre opțiunile posibile // Array ( => Windows 95 => Windows 7 => Windows Vista => Windows XP => Windows 10 => Windows 8)

Funcții compacte

Funcția compactă vă permite să creați o matrice asociativă dintr-un set de variabile, unde numele variabilelor în sine sunt cheile:

Apple II => Apple => 1978) ?>

Funcția compactă primește un set de variabile între paranteze. Fiecare variabilă este specificată între ghilimele fără semnul $. Rezultatul funcției este o nouă matrice.

Sortare Arrays

Există două tipuri de sortare în PHP: sortarea șirurilor de caractere alfabetic și sortarea numerelor crescător/descrescător. Dacă valorile sortate reprezintă șiruri, atunci acestea sunt sortate alfabetic, dacă sunt numere, atunci sunt sortate în ordinea crescătoare a numerelor. PHP își alege propriul tip de sortare în mod implicit.

Pentru a sorta în ordine crescătoare, utilizați funcția de sortare:

„Lenovo IdeaTab A3500”, „samsung” => „Samsung Galaxy Tab 4”, „apple” => „Apple iPad Air”); asort($tablete); ecou"

    "; foreach ($tablete ca $key => $value) ( ​​​​echo "
  • $key: $value
  • ";) ecou"
"; ?>

În acest caz, valorile matricei reprezintă șiruri, așa că PHP va alege să sorteze alfabetic. Cu toate acestea, folosind un parametru suplimentar, putem spune explicit interpretului PHP ce tip de colare să folosească. Acest parametru poate lua trei valori:

    SORT_REGULAR: selecție automată a sortării

    SORT_NUMERIC: sortare numerică

    SORT_STRING: sortați alfabetic

Să indicăm în mod explicit tipul de sortare:

Sortare($tablete, SORT_STRING);

Pentru a sorta o matrice în ordine inversă, utilizați funcția arsort:

Arsort($tablete);

Sortarea după chei

Funcția asort sortează după valorile elementelor, dar există și o sortare după chei. Este reprezentat de funcția ksort:

Ksort($tablete, SORT_STRING);

Sortarea după chei în ordine inversă se face prin funcția krsort():

Krsort($tablete);

Sortare naturală

Deși funcțiile de sortare descrise mai sus își fac treaba bine, capacitățile lor încă nu sunt suficiente. De exemplu, să sortăm următoarea matrice în ordine crescătoare:

Windows 10 => Windows 7 => Windows 8) ?>

Deoarece valorile reprezintă șiruri, PHP sortează alfabetic. Totuși, această sortare nu ține cont de numere și de caz. Prin urmare, valoarea „Windows 10” va veni chiar la început, și nu la sfârșit, așa cum ar trebui să fie. Și pentru a rezolva această problemă, PHP are funcția natsort(), care realizează sortarea naturală:

Windows 7 => Windows 8 => Windows 10) ?>

Dacă avem nevoie și de sortare să nu țină seama de majuscule, atunci putem folosi funcția natcasesort().

Sortarea este una dintre cele mai importante proceduri atunci când lucrați cu matrice. Pentru a-i înțelege importanța, este suficient să ne amintim acțiuni precum, de exemplu, sortarea filmelor în ordine alfabetică sau sortarea oricăror prețuri în ordine crescătoare sau descrescătoare etc. De acord, acțiuni foarte frecvente pentru diverse aplicații! Astăzi vom vorbi despre cum să sortăm elementele matricei în funcție de condițiile specificate.

Deci, sortarea facilitează lucrul cu matrice. Când elementele sunt sortate, este mai ușor să le găsiți și să efectuați acțiunile necesare cu ele, de exemplu, cele despre care am scris chiar mai sus. Totul depinde de sarcina cu care te confrunți.

Sarcinile pot fi diferite, dar instrumentele pe care le vom folosi vor rămâne standard. Aceste instrumente sunt funcții speciale care sunt utilizate pentru sortarea elementelor matricei.

Există mai multe dintre aceste funcții în PHP și pe care să o utilizați va depinde din nou de sarcina specifică, precum și de dacă matricea dvs. este o matrice asociativă sau o matrice de listă.

Să ne uităm la aceste funcții folosind exemple și să vedem cum funcționează.

Sortați listele de matrice în ordine alfabetică și inversă

În primul rând, să ne familiarizăm cu o funcție destul de simplă și de înțeles fel().

Ne va permite să sortăm elementele matricei în ordine crescătoare sau, dacă aceste elemente sunt elemente șir, în ordine alfabetică.

Aplicarea sa este destul de simplă. Pentru a testa această funcție, trebuie doar să declarăm o matrice, apoi să folosim funcția pentru a-și sorta elementele și a afișa rezultatul pe ecran pentru a vedea ce se întâmplă.

$Mass = array("Katya", "Anya", "Lena", "Andrey"); sortare($Masa); print_r($Mas); ?>

Iar rezultatul va fi următorul. După cum puteți vedea în captura de ecran din dreapta, articolele sunt sortate în ordine alfabetică. Dacă în loc de elemente șir avem numere, atunci această funcție va sorta și numerele în ordine crescătoare. Puteți verifica acest lucru singur.

Există și o funcție care face opusul, adică sortează elementele matricei în ordine descrescătoare sau în ordine alfabetică inversă.

Această funcție este numită rsort(). Funcționează așa:

$Mass = array("Katya", "Anya", "Lena", "Andrey"); rsort($Mas); print_r($Mas); ?>

După cum puteți vedea, acum rezultatul este complet opus. Elementele matricei sunt sortate în ordine descrescătoare, ceea ce înseamnă în acest caz în ordine alfabetică inversă.

Cred că cu aceste funcții totul este foarte clar. Testați-le cu matricele dvs. și nu veți avea întrebări.

Sortarea tablourilor asociative

Totul este grozav, însă, cu tablourile asociative nu vom mai putea folosi aceste funcții, deoarece ele rup legătura dintre valoare și cheia matricei. Prin urmare, trebuie să ne familiarizăm cu mai multe funcții care ne vor permite să sortăm tablouri asociative.

După cum știm, tablourile asociative au chei și valori. În consecință, sortarea se poate face pe chei sau după valori.

Să începem prin a sorta după valori.

Pentru a sorta valorile unui tablou asociativ în ordine alfabetică, vom folosi funcția asort().

Pentru a face acest lucru, mai întâi creați o matrice asociativă, aplicați funcția și afișați rezultatul pe ecran.

$Mass["one"]="Katya"; $Mass["two"]="Boris"; $Mass["trei"]="Anya"; $Mass["four"]="Rita"; asort($Mas); print_r($Mas); ?>

După cum puteți vedea, valorile matricei asociative sunt sortate în ordine alfabetică, totuși, conexiunea lor cu cheile este păstrată.

Funcția funcționează în același mod arsort(), cu excepția faptului că sortează valorile tabloului asociativ în ordine inversă.

$Mass["one"]="Katya"; $Mass["two"]="Boris"; $Mass["trei"]="Anya"; $Mass["four"]="Rita"; arsort($Mas); print_r($Mas); ?>

Din nou, putem vedea că valorile elementelor de matrice își păstrează asocierea cu cheile, dar sunt sortate în ordine inversă.

Putem sorta aceeași matrice asociativă după chei.

După cum probabil ați ghicit deja, acest lucru se poate face în ordine alfabetică sau inversă.

Pentru a sorta matricea după chei în ordine alfabetică, avem nevoie de o funcție ksort().

$Mass["one"]="Katya"; $Mass["two"]="Boris"; $Mass["trei"]="Anya"; $Mass["four"]="Rita"; ksort($Mas); print_r($Mas); ?>

Matricea este sortată după chei în ordine alfabetică.

Pentru a sorta o matrice după cheile sale în ordine inversă, utilizați funcția krsort().

$Mass["one"]="Katya"; $Mass["two"]="Boris"; $Mass["trei"]="Anya"; $Mass["four"]="Rita"; krsort($Mas); print_r($Mas); ?>

Cred că totul este clar din captura de ecran.

Sortare personalizată

De asemenea, putem stabili propria noastră ordine de sortare, adică să creăm o sortare personalizată.

PHP oferă, de asemenea, funcții speciale pentru aceasta.

Există o funcție pentru sortarea personalizată a listelor usort().

Va fi nevoie de două argumente. Primul argument este matricea noastră; al doilea argument va conține numele funcției care compară două elemente.

Funcția de comparație va lua două variabile și ar trebui să returneze una dintre următoarele valori:

1 – dacă primul element de comparație este mai mare decât al doilea;

-1 – dacă al doilea este mai mare decât primul;

0 – dacă elementele sunt egale.

În acest fel, de exemplu, putem sorta elementele unui tablou în ordinea crescătoare a lungimii lor.

Pentru a face acest lucru, mai întâi declarăm matricea în sine, care va conține elemente șir de diferite lungimi.

După aceasta, vom folosi funcția pentru sortarea personalizată usort(). Îl vom transmite ca argumente: numele matricei noastre și numele funcției pe care am creat-o pentru a compara elemente.

După toate acestea, putem afișa rezultatul pe ecran pentru a ne asigura că elementele noastre sunt sortate în ordinea crescătoare a lungimii lor.

$Mass = array("Andrey", "Yana", "Katya"); funcția check_length($str1,$str2)( $lungime1 = strlen($str1); $lungime2 = strlen($str2); if($lungime1 == $lungime2): returnează 0; elseif($lungime1

Obținem următorul rezultat. Elementele matricei noastre sunt sortate în ordinea creșterii lungimii.

De asemenea, putem face sortare personalizată a matricei asociative după cheile sale. Pentru aceasta avem nevoie de o funcție uksort()și matricea asociativă în sine.

Să păstrăm funcția personalizată aceeași, adică să comparăm lungimea tastelor.

Cheile elementelor de matrice sunt sortate în ordinea crescătoare a lungimii lor.

Și putem crea, de asemenea, un fel personalizat al matricei asociative după valorile elementelor sale. Funcția ne va ajuta în acest sens uasort().

Principiul este în continuare același.

$Mass["one"]="yana"; $Mass["două"]="andrey"; $Mass["trei"]="katya"; funcția check_length($str1,$str2)( $lungime1 = strlen($str1); $lungime2 = strlen($str2); if($lungime1 == $lungime2): returnează 0; elseif($lungime1

Matricea este acum sortată după lungimea crescătoare a valorilor sale.

Desigur, o funcție de utilizator poate fi diferită, de exemplu, poate arunca valori într-un registru comun sau poate face alte lucruri.

Pentru a înțelege bine cum funcționează sortarea personalizată, trebuie să exersați și să încercați să scrieți un fel de funcție de comparație proprie.

Cu toate acestea, acum cred că aveți o înțelegere completă a modului în care puteți sorta elementele unui tablou și cum să utilizați aceste elemente sortate.

Exersează, scrie-ți comentariile și distribuie articolul prietenilor folosind butoanele rețelelor sociale.

Dacă nu v-ați abonat încă la actualizările blogului, atunci abonați-vă. Formularul de abonare este mai jos.

Anna Kotelnikova a fost cu tine. Ne vedem în articolele următoare.

Când lucrați pe multe site-uri, apare adesea problema sortării datelor matricei în ordine alfabetică. Mulți oameni scriu tablouri suplimentare pentru aceasta, compară tabele mari și repetă peste fiecare nume... Această opțiune nu este cea mai bună, deși o vom lua în considerare și noi. In acest articol as vrea sa va propun cea mai simpla si scurta cale, pe care, daca cititi cu atentie manualele, o gasiti in documentatie.

Matrice alfabetică PHP

Metoda este destul de simplă și constă din doi pași: setarea localizării (setlocal) și sortarea directă a matricei. Să ne uităm la un exemplu cu comentarii.

Cod PHP

setlocale(LC_ALL, "Russian_Russia.1251"); // setați localitatea pentru literele rusești

// exemplu de matrice în care cuvintele NU sunt în ordine
$example=array("jar","Boris","vizualizare","chestionar","păsător","Fedor","soție","voce");

Natcasesort($example, SORT_LOCALE_STRING); // sortează matricea FĂRĂ sensibilitate la minuscule
// PENTRU A FI SENSIBILĂ LA MINUSCULE MINUSCULE, folosiți sort în loc de natcasesort

// afișează rezultatul
foreach ($exemplu ca $key => $value)(
echo „$valoare”; // afișează numai cuvinte, fără index
}
?>

Demonstrație Descărcați surse
În demo puteți vedea scriptul în acțiune. Dacă doriți, puteți descărca și arhiva cu fișierul.

Dacă serverul dvs. nu este pe Windows, atunci va trebui să instalați alte localități sau mai multe simultan:

(LC_ALL,"ru_RU.CP1251", "rus_RUS.CP1251", "Russian_Russia.1251");!}
// Imprimă ru_RU.CP1251 pentru FreeBSD
// Imprimă rus_RUS.CP1251 pentru Linux
// Rezultă Russian_Russia.1251 pentru Windows

Voi trece înainte să răspund la una dintre întrebări - localitatea pentru Ucraina în PHP arată astfel:


Cum să setați localitatea pentru alte codificări în PHP?

// Instalează locale pentru Windows

// Codificare Windows-1251
setlocale(LC_ALL, "Russian_Russia.1251");

// Codificarea KOI8-R
setlocale(LC_ALL, "Russian_Russia.20866");

// Codificare UTF-8 (utilizați cu atenție)
setlocale(LC_ALL, "Russian_Russia.65001");
?>

A doua modalitate de a aranja o matrice în ordine alfabetică PHP

Dacă această metodă nu vă convine și doriți să mergeți pe calea grea, atunci creați o matrice ca aceasta:

Cod PHP

=> a
=> b
=> in
=> g
=> d
=> e
=> ё
=> w
=> s
=> și
=> al
=> la
=> l
=> m
=> n
=> o
=> p
=> p
=> cu
=> t
=> y
=> f
=> x
=> ts
=> h
=> w
=> sch
=> ъ
=> s
=> b
=> uh
=> da
=> eu
Și repetă peste a doua matrice după prima literă.
Prima literă a oricărui element al matricei se calculează după cum urmează:

Cod PHP

$city="Moscova"; // de exemplu element cu index 1

$prima_litera = mb_substr($oraș,0,1,"UTF-8"); // obține litera „M”
Deoarece lucrăm cu litere rusești (codare pe mai mulți octeți), este mai bine să folosim funcția mb_substr, iar la final este mai bine să indicați exact codificarea datelor variabilei sau matricei, în cazul nostru UTF-8.

Vă mulțumim pentru atenție! Sper că informația a fost de folos. Dacă aveți întrebări, scrieți în comentarii.

Și vorbește cu tine despre diverse „bunătăți” de care ai putea avea nevoie atunci când finalizezi soluții gata făcute.

Iar unul dintre ele, pe care eu personal îl întâlnesc destul de des la serviciu, este sortarea matriceiphp.

Astfel de întâlniri dese s-au datorat faptului că, după cum arată practica, oamenilor le place din când în când, pentru o schimbare, să schimbe succesiunea de afișare a obiectelor pe site-ul lor - fie că este vorba despre produse dintr-un magazin online, mesaje ale utilizatorilor pe un forum, sau blocuri de informații de pe site-urile de cărți de vizită.

Pentru începători, vă voi aminti doar principalele prevederi în limbajul cel mai ușor de înțeles. Prin urmare, dacă nu vă considerați unul dintre aceștia, puteți trece imediat la exemple de probleme și modalități de a le rezolva.

O mică teorie despre matricele php

PHP este un limbaj de programare pe partea de server. Bazat pe server, deoarece scripturile care sunt lansate de utilizatori prin interfața web (browser de internet) sunt stocate și executate pe server.

Scripturile PHP sunt ascunse de viziunea utilizatorului obișnuit. În fereastra browserului dvs. vedeți doar rezultatele execuției lor.

Un tablou în programare este o colecție de date. Ele constau din elemente de matrice, care sunt perechi [index] => [valoare].

Matricele pot fi statice, dinamice, eterogene etc. (o știință întreagă) 🙂 Pentru a lucra cu ele, este suficientă clasificarea în unidimensională și multidimensională.

Pentru a înțelege diferența dintre ele, este suficient să oferiți o descriere a structurii lor.

Matrice php unidimensională:

Matrice ( => 1 => 2 => 3)

matrice multidimensională PHP:

Array ( => Array ( => 1) => Array ( => 2) => Array ( => 3))

Ai observat? Dacă nu, acordați atenție elementelor matricei multidimensionale php. Ei înșiși sunt matrice. Acestea. O matrice multidimensională este o colecție de matrice. Nivelul cuibării lor poate fi atât de mare cât se dorește.

Acum cred ca este clar :)

De asemenea, aș dori să evidențiez separat conceptul de matrice asociativă în PHP. În viața reală, ele nu sunt la fel de comune ca cele obișnuite, dar încă apar.

Pe scurt, acestea sunt matrice în care cheia și valoarea elementului de matrice sunt indisolubil legate și există o anumită legătură logică între ele care nu poate fi întreruptă în nicio circumstanță.

Un exemplu de tablou asociativ este următoarea construcție:

Matrice ( => 12 [nume complet] => Ivanov Ivan Ivanovici [scor mediu] => 3)

După cum puteți vedea, aici valorile cheilor și valorile elementelor matricei sunt strâns legate și în niciun caz nu trebuie întreruptă această conexiune. Din acest motiv, tablourile asociative sunt adesea numite „dicționare” sau „directoare”.

Prin urmare, această caracteristică trebuie luată în considerare la sortarea unui array PHP, deoarece Nu toate metodele sunt potrivite pentru astfel de structuri.

În PHP însuși, tablourile sunt create în două moduri:

  1. $carti = array(‘ABC’, ‘Primer’, ‘Dictionar’); sau $books = array(‘azb’ => ‘ABC’, ‘buk’ => ‘Primer’, ‘slov’ => ‘Dictionar’); A doua opțiune este utilizată atunci când un element trebuie să specifice în mod explicit un câmp cheie (relevant pentru tablourile asociative). Dacă nu o specificați, cheile elementului de matrice vor fi numere în mod implicit. Începând de la 0 (zero).
  2. $carti = 'ABC'; $carti = 'carte ABC'; $carti = 'carte ABC';

În ambele cazuri, $books va fi o matrice. Așadar, dacă dai peste astfel de construcții în codul site-ului tău, nu va mai fi ceva de neînțeles pentru tine :)

Dacă doriți să aflați mai detaliat despre matrice PHP, vă recomand următorul videoclip:

Permiteți-mi să vă reamintesc că pentru a vedea structura matricei pe ecran, după declararea matricei în codul site-ului, trebuie să scrieți următoarea construcție:

Ecou"

"; print_r(variabilă_matrice); die();

Dacă variabila pe care o imprimați este o matrice, textul va începe cu următoarea linie:

Matrice (...

Și încă câteva cuvinte despre subiectul articolului nostru - sortarea tablourilorphp.

După cum puteți înțelege, datele din matrice sunt structurate, iar elementele sunt aranjate într-o anumită secvență. Pentru a o schimba, avem nevoie doar de sortarea matricei PHP, care este implementată de funcții de limbaj gata făcute.

Prin urmare, tot ce trebuie să facem este să apelăm funcția necesară după declararea matricei, specificând-o ca parametru.

Să trecem la o prezentare generală a funcțiilor în sine.

funcții de sortare a matricei php

Lista lor completă este prezentată în documentația oficială a limbajului php:

Pentru a sorta o matrice PHP folosind o anumită funcție, va trebui să o apelați după declararea matricei și completarea acesteia cu valori, specificând matricea noastră ca parametri. De exemplu:

$masini = array("Toyota", "Mazda", "Mitsubishi"); sortare($masini);

Să luăm în considerare pe scurt funcționalitatea fiecăruia dintre ele. Funcțiile vor fi specificate în formatul în care vor trebui apelate în cod, adică. "nume(parametrul1, parametrul2, ...);".

Nu uitați să puneți „;” după apelarea funcției, deoarece fără el, va apărea un mesaj de eroare frumos pe ecran :)

Ca exemplu ilustrativ, să luăm o matrice simplă unidimensională în care atât cheile, cât și valorile vor fi neordonate, astfel încât rezultatele executării funcțiilor să fie mai vizuale și mai ușor de înțeles.

Matrice ( => 11 => 18 => 9)

Deci, cum puteți sorta o matrice în ordinea dorită în PHP?

Funcții pentru sortarea simplă a matricei php după valoare

Dacă preferați să vizionați material video decât să citiți, atunci aș dori să vă recomand să vizionați acest videoclip, care demonstrează clar și clar funcționarea funcțiilor de sortare a matricei PHP din acest bloc:

Dacă după aceasta mai aveți întrebări, puteți găsi mai jos informații mai detaliate despre fiecare funcție.

sortare($array, $flag);- una dintre cele mai simple și mai populare funcții. Vă permite să sortați o matrice în ordine crescătoare în php, ținând cont de valorile elementelor, adică vor fi aranjate de la valorile cele mai mici la cele mai mari. Este nevoie de o variabilă matrice și unul dintre steagurile de sortare ca parametri, ceea ce vă permite să schimbați comportamentul de sortare.

Lista steagurilor:

  • SORT_REGULAR – elementele sunt comparate fără a schimba tipurile
  • SORT_NUMERIC – elementele sunt comparate ca numere
  • SORT_STRING – elementele sunt comparate ca șiruri
  • SORT_LOCALE_STRING – comparație de șiruri, dar ținând cont de localitatea curentă.
  • SORT_NATURAL – compararea șirurilor de elemente, ținând cont de ordinea lor naturală (cum ar fi natsort)
  • SORT_FLAG_CASE – sortarea cu majuscule și minuscule a elementelor matricei php (poate fi combinată cu SORT_STRING sau SORT_NATURAL pe biți OR).

Dar, în cele mai multe cazuri, rezultatul executării funcției este corect chiar și fără aceste steaguri de clarificare. În mod implicit (dacă nu este specificat nimic) va fi folosit SORT_REGULAR.

Matricea noastră de testare după apelarea funcției sort() va arăta astfel:

Matrice ( => 9 => 11 => 18)

După cum puteți vedea, după sortarea matricei după valori, valorile cheilor lor s-au schimbat, de asemenea, deoarece sortarea funcționează fără a păstra relația cheie-valoare, așa cum se precizează în documentația oficială php.

Prin urmare, această opțiune este potrivită pentru marea majoritate a cazurilor.

rsort($array, $flag);— o funcție care este antagonistul de tip. Antagonist, deoarece sortează matricea în același mod, numai că nu în ordine crescătoare, ci în ordine descrescătoare, i.e. Elementele matricei php cu cele mai mari valori vor merge primele.

De asemenea, îi puteți transmite doi parametri: matricea în sine și steag-ul de sortare și, la fel ca sortarea, este mai potrivit pentru tablourile unidimensionale. Matricea noastră de testare după apelarea acestei funcție va lua următoarea formă:

Matrice ( => 18 => 11 => 9)

asort($array, $flag); este o funcție PHP pentru sortarea unui tablou după valoare, al cărei mecanism este, de asemenea, foarte asemănător cu sortarea.

Singura excepție este că vă permite să sortați o matrice php după valoarea elementelor sale, menținând în același timp relația cheie-valoare.

Prin urmare, această caracteristică este excelentă pentru sortarea tablourilor asociative php, adică structuri în care această legătură este logică și importantă.

Elementele vor fi aranjate în ordine crescătoare, deoarece... vă permite să sortați o matrice asociativă PHP după valoare, păstrând în același timp cheile.

De asemenea, puteți trece doi parametri. Matricea noastră de testare va arăta astfel:

Matrice ( => 9 => 11 => 18)

După cum puteți vedea, diferența față de sortare este doar în stocarea cheilor valorilor după care este sortată matricea php. Acest lucru se numește păstrarea relației cheie-valoare, care este incredibil de importantă atunci când sortați matrice asociative PHP.

arsort($array, $flag);- o altă funcție php pentru sortarea unui tablou după valoare. Asort antagonist.

Funcționează pe același principiu ca și funcția menționată, doar matricea php va fi sortată în ordine descrescătoare în acest caz. De asemenea, o opțiune excelentă atunci când sortați matrice asociative PHP.

După apelarea acestei funcții, exemplul nostru va arăta astfel:

Matrice ( => 18 => 11 => 9)

Funcții avansate de sortare a matricei php după valoare

Acest bloc de funcții, spre deosebire de cele anterioare, care permiteau schimbarea ordinii în ordine descrescătoare/crescătoare, vă va permite să adăugați varietate și să aranjați elementele în secvențe diferite, altele decât cele „tradiționale”.

Această caracteristică le face potrivite pentru rezolvarea diverselor probleme non-standard, uneori foarte interesante :)

natsort($array);— această funcție adaugă varietate familiei de soluții asemănătoare sortării, deoarece mecanismul funcționării sale este fundamental diferit de ele. natsort are un singur parametru de intrare - acesta este o matrice sortabilă, ale cărei valori vor fi aranjate în ordinea familiară oamenilor. Acest algoritm se numește „ordonare naturală”, care în rusă înseamnă „ordine naturală”. Pentru a clarifica sensul acestei afirmații, vom lua ca exemplu o altă matrice:

Matrice ( => student5 => student1 => student10)

În plus, funcția natsort păstrează relația cheie-valoare. Prin urmare, vom compara munca ei cu asort, care este cât mai asemănătoare cu ea. După apelarea acestuia din urmă, matricea noastră va lua următoarea formă:

Matrice ( => student1 => student10 => student5)

Dacă apelați natsort, matricea rezultată va fi astfel:

Matrice ( => student1 => student5 => student10)

Cred că acum puteți vedea diferența și principiul cum funcționează natsort vă va fi clar :-)

shuffle($array); este o funcție minunată și foarte utilă cu care poți amesteca o matrice PHP și să-i plasezi elementele în ordine aleatorie.

Este foarte convenabil atunci când trebuie să aranjați produsele unui magazin online într-o categorie sau pe o altă pagină într-o ordine aleatorie sau când mergeți pe un site de cărți de vizită, arătați utilizatorilor blocuri diferite de informații de fiecare dată într-o secvență diferită.

În acest caz, relația cheie-valoare nu este păstrată. Adică, matricea pe care am folosit-o în exemplul anterior, pentru mine personal, a luat forma:

Matrice ( => student10 => student5 => student1)

Mai mult, după fiecare apel de funcție, ordinea elementelor va fi diferită.

Funcțiile despre care am discutat mai devreme sunt destul de simple și mecanismul de funcționare a acestora este clar. O matrice este transmisă ca parametru, al cărui conținut trebuie sortat după valorile elementelor sale, precum și un steag care poate schimba comportamentul de sortare (puteți face cu ușurință fără el).

Este destul de popular printre programatori, deoarece... vă permite să rezolvați orice problemă legată de sortare (folosind o varietate de algoritmi) folosind funcția sa.

Una dintre aceste sarcini este php conform câmpului solicitat.

Pentru a vă arăta în mod clar cum funcționează următoarele funcții, să luăm următoarea matrice ca exemplu:

Array ( => Array ( => 32) => Array ( => 11) => Array ( => 27))

După cum puteți vedea, este multidimensional, deoarece... elementele sale sunt matrice, a căror structură este identică: toate au un câmp cu cheia „id”. Și acum sarcina noastră este să sortăm aceste elemente în ordine crescătoare, adică. astfel încât elementele din matricea principală să fie aranjate în conformitate cu valorile câmpurilor din submatrice.

Trebuie să spun, o sarcină destul de comună. Următoarele funcții ne vor ajuta să o rezolvăm:

usort($array, 'funcţie');— Funcție PHP pentru sortarea unui tablou multidimensional după câmpul dorit.

Vă permite să sortați elementele unui tablou php fără a păstra relația cheie-valoare în conformitate cu o funcție definită de utilizator, al cărei nume este transmis ca al doilea parametru la apelarea usort.

Funcția în sine este descrisă separat. În ceea ce privește exemplul nostru, pentru a sorta elementele unui tablou php multidimensional după câmpul ['id'] în ordine crescătoare, funcția definită de utilizator va arăta astfel:

Funcția myCmp($a, $b) ( dacă ($a["id"] == $b["id"]) returnează 0; return $a["id"] > $b["id"] ? 1 : -1 )

Tot ce trebuie să facem acum pentru a începe sortarea este să apelăm usort($array, 'myCmp'); în locul cerut în cod. Primul parametru specifică numele variabilei matrice.

Ca rezultat, obținem următoarele:

Array ( => Array ( => 11) => Array ( => 27) => Array ( => 32))

uasort($array, 'funcţie');— o altă funcție PHP pentru sortarea unui tablou multidimensional după câmpul dorit.

Funcționează similar cu usort, dar păstrează relația cheie-valoare, făcând această funcție potrivită pentru sortarea matricelor asociative multidimensionale.

Funcția personalizată pentru exemplul nostru va fi aceeași. Rezultatele executării sale vor arăta astfel:

Array ( => Array ( => 11) => Array ( => 27) => Array ( => 32))

Pentru a schimba ordinea de sortare a elementelor și pentru a face unele transformări suplimentare de date, va trebui să editați funcția utilizator, așa cum probabil v-ați fi ghicit singur :)

De exemplu, dacă matricele dvs., care sunt elemente ale celui original, conțin un câmp ['nume'] cu o valoare șir, atunci o funcție personalizată pentru sortarea unui tablou php multidimensional după acest câmp în ordine crescătoare va arăta astfel:

Funcția myCmp($a, $b) ( dacă (strcasecmp($a["nume"], $b["persoana"]["nume"]) == 0) returnează 0; returnează strcasecmp($a["nume" "], $b["nume"]) > 0 ? 1: -1; )

Sortarea matricelor PHP folosind funcții personalizate nu este cea mai ușoară opțiune, dar este foarte flexibilă în personalizare, iar dacă o stăpânești, va deveni soluția ta preferată.

array_multisort($array1, $array2, $flag);— pentru sfârșit am salvat cea mai îngrozitoare și obscură funcție PHP pentru sortarea unei matrice. Ca parametri de intrare, sunt necesare două matrice și aceleași steaguri de sortare care pot fi specificate în funcții asemănătoare sortării. array_multisort funcționează după cum urmează: primul parametru este matricea sortată, a doua matrice specifică ordinea de sortare a primului, după care a doua matrice este sortată în același mod ca primul. În loc de o matrice care să reprezinte ordinea de sortare, puteți folosi constantele SORT_DESC pentru a sorta matricea în ordine descrescătoare și SORT_ASC în ordine crescătoare. La toată această confuzie, puteți adăuga și steaguri de sortare, care pot veni după toate matricele.

$carti = array(32, 11, 27); $sort_array = array(1, 2, 3); array_multisort($carti, $sort_array);

În acest exemplu, am sortat o matrice simplă unidimensională $books conform matricei $sort_array. Ca rezultat, prima matrice a luat următoarea formă:

Matrice ( => 11 => 27 => 32)

Și al doilea a devenit așa:

Matrice ( => 2 => 3 => 1)

Adică a fost sortat după primul. Acesta este patrunjel :)

Array_multisort este descris mai detaliat în următorul videoclip. Tot acolo veți găsi exemple suplimentare de utilizare:

Folosind această funcție, puteți sorta și matrice multidimensionale:

$carti = array(array(32), array(11), array(27)); $sort_array = array(1, 2, 3); array_multisort($carti, $sort_array);

Matricea $books va arăta astfel:

Array ( => Array ( => 11) => Array ( => 27) => Array ( => 32))

În același timp, în această funcție puteți specifica mai multe tablouri, sortând după mai multe câmpuri. În acest caz, rezultatele sortării tablourilor anterioare le vor influența pe cele ulterioare, ceea ce va duce în cele din urmă la sortarea celui mai recent după diverse criterii.

Acesta este un fel de „bulgăre de zăpadă” în PHP.

Când sortați o matrice PHP folosind această funcție, relația cheie-valoare este păstrată pentru tablourile asociative, dar nu și pentru tablourile numerice.

Programatorii care au testat funcționarea diferitelor funcții observă că atunci când sortează o matrice multidimensională, php array_multisort arată rezultate mai bune decât usort.

Dar array_multisort nu va putea face față tuturor sarcinilor pe care le poate face usort. De exemplu, la fel sortarea unui tablou multidimensionalphp după câmpul obligatoriu. Deci, în fiecare caz individual, trebuie să vă analizați șansele de succes atunci când utilizați unul sau altul.

Personal, pot spune că nu-mi place puțin array_multisort din cauza confuziei sale și a tensiunii crescute a creierului care vine odată cu încercarea de a imagina matricea rezultată sortată folosindu-l.

Prin urmare, încerc să nu îl folosesc decât dacă este absolut necesar, acordând preferință usort și funcțiilor mai simple, ceea ce vă încurajez și pe voi să le faceți :)

Funcțiile pe care le-am discutat mai devreme vă permit să sortați matrice în PHP după valoarea elementelor. Să vorbim despre cum puteți efectua o acțiune similară pe tastele elementului.

Funcții PHP pentru a sorta o matrice după cheie

Înainte de a trece la o prezentare generală a funcțiilor din acest grup, aș dori să spun că toate au un lucru în comun - toate păstrează relația cheie-valoare. Și, strict vorbind, nu se putea altfel, pentru că... atunci n-ar mai avea rost la ele :)

Aceasta este particularitatea. Să ne uităm la fiecare funcție mai detaliat.

ksort($array, $flag);— funcția este analogă cu asort, doar elementele din matrice vor fi ordonate nu după valori, ci după chei.

Acest design are doi parametri de intrare: matricea PHP de sortat și unul dintre steaguri de sortare, a cărui listă completă o puteți găsi în descrierea funcției de sortare (folosirea acesteia este opțională). Această funcție php vă permite să sortați o matrice în ordine crescătoare.

Pentru a demonstra cum funcționează, să revenim la exemplul descris chiar la începutul articolului:

Matrice ( => 11 => 18 => 9)

Dacă îl sortați folosind ksort, rezultatul va arăta astfel:

Matrice ( => 18 => 9 => 11)

Cred că totul este simplu și clar.

krsort($array, $flag);- o altă funcție PHP pentru sortarea unui tablou după cheie, foarte asemănătoare cu cea anterioară.

Singura diferență este că sortează matricea php în ordine descrescătoare. Adică, este un antagonist pentru ksort, la fel cum rsort este pentru a sorta.

De asemenea, are doi parametri de intrare: matricea de sortat și una dintre chei. După rularea acestuia, exemplul nostru va arăta astfel:

Matrice ( => 11 => 9 => 18)

Cred ca comentariile nu sunt necesare :)

ukrsort($array, 'funcţie');- un analog al funcției PHP menționate anterior pentru sortarea unui tablou după cheie - usort.

Funcționează pe același principiu: păstrează relația cheie-valoare și matricea PHP este sortată în conformitate cu funcția definită de utilizator, al cărei nume este trecut ca al doilea parametru. Primul parametru este neschimbat - acesta este matricea care trebuie sortată.

Diferența față de usort este că sortarea are loc după cheile elementului.

Pentru a ilustra modul în care funcționează această funcție, utilizați următorul exemplu:

Matrice ( => 40 => 0 => 10)

De exemplu, trebuie să sortăm o matrice php după cheie, în ordine crescătoare. În acest caz, funcția utilizator ar arăta astfel:

Funcția myCmp($a, $b) ( dacă ($a == $b) returnează 0; returnează $a< $b ? 1: -1; }

Ca rezultat, matricea noastră va lua următoarea formă:

Matrice ( => 0 => 10 => 40)

Un avantaj clar al utilizării acestei funcții este că poate fi folosită pentru a sorta o matrice PHP în funcție de niște criterii sau algoritm neobișnuit.

Permiteți-mi să vă reamintesc că trebuie să-l utilizați numai atunci când cheile elementelor matricei au un fel de semnificație semantică. În caz contrar, este mai bine să utilizați usort sau alte funcții mai simple.

Articolul nostru s-a încheiat (a-ți place dacă ai citit până aici) :)

În ea, am încercat să descriu ca simplu și în același timp clar și complet toate modalitățile posibile de sortare a diferitelor tipuri de matrice în PHP, susținându-mi cuvintele cu exemple.

Recunosc că publicația a fost destul de voluminoasă și greu de citit o dată. Dar de fiecare dată când ai nevoie sortare matrice php, puteți oricând să consultați acest articol pentru o descriere a funcției de care aveți nevoie și pentru a vedea exemple de utilizare a acesteia.

Sper ca informatiile ti-au fost de folos :)

Abonați-vă la actualizările proiectului și

Cele mai bune articole pe această temă