Ktorá funkcia zoradí hodnoty poľa v zostupnom poradí. Triedenie poľa php rôznymi spôsobmi

  • 02.08.2019

A porozprávajte sa s vami o rôznych „dobrotách“, ktoré môžete potrebovať pri finalizácii hotových riešení.

A jeden z nich, s ktorým sa ja osobne musím v práci stretávať pomerne často, je triedenie políphp.

Takéto časté stretnutia boli spôsobené tým, že, ako ukazuje prax, ľudia pre zmenu radi z času na čas pozmenia postupnosť zobrazovania objektov na svojej stránke – či už ide o tovar v internetovom obchode, správy používateľov na fóre alebo bloky informácií na stránkach s vizitkami.

Pre začiatočníkov len pripomeniem hlavné ustanovenia v najzrozumiteľnejšom jazyku. Ak sa teda sami nezaradíte, môžete hneď prejsť na príklady úloh a spôsobov ich riešenia.

Trochu teórie o poliach php

PHP je programovací jazyk na strane servera. Serverové, pretože skripty, ktoré používatelia spúšťajú cez webové rozhranie (internetový prehliadač), sú uložené a spúšťané na serveri.

PHP skripty sú pred zrakom bežného používateľa skryté. V okne vašich prehliadačov vidíte len výsledky ich vykonania.

Pole v programovaní je zbierka niektorých údajov. Pozostávajú z prvkov poľa, ktorými sú dvojice [index] => [hodnota].

Polia môžu byť statické, dynamické, heterogénne atď. (celá veda) 🙂 Na prácu s nimi nám úplne stačí triedenie na jednorozmerné a viacrozmerné.

Aby ste pochopili rozdiel medzi nimi, stačí uviesť popis ich štruktúry.

Jednorozmerné pole php:

Pole ( => 1 => 2 => 3)

php viacrozmerné pole:

Pole ( => Pole ( => 1) => Pole ( => 2) => Pole ( => 3))

Všimli ste si? Ak nie, venujte pozornosť prvkom viacrozmerného poľa php. Oni sami sú poliami. Tie. Viacrozmerné pole je kolekcia polí. Úroveň ich hniezdenia môže byť ľubovoľne veľká.

Teraz je to myslím jasné 🙂

Chcel by som tiež osobitne zdôrazniť koncept asociatívneho poľa php. V skutočnom živote nie sú také bežné ako zvyčajne, ale stále majú miesto.

V skratke ide o polia, v ktorých sú kľúč a hodnota prvku poľa neoddeliteľne spojené a medzi nimi existuje určité logické spojenie, ktoré by sa nikdy nemalo prerušiť.

Príkladom asociatívneho poľa je nasledujúca konštrukcia:

Pole ( => 12 [meno] => Ivanov Ivan Ivanovič [priemerné_skóre] => 3)

Ako vidíte, hodnoty kľúčov a hodnoty prvkov poľa sú úzko spojené a toto spojenie by sa v žiadnom prípade nemalo prerušiť. Z tohto dôvodu sa asociatívne polia veľmi často nazývajú „slovníky“ alebo „slovníky“.

Preto je potrebné túto vlastnosť brať do úvahy pri triedení poľa php, pretože nie všetky metódy sú vhodné pre takéto štruktúry.

V samotnom PHP sa polia vytvárajú dvoma spôsobmi:

  1. $books = array('ABC', 'Primer', 'Slovník); alebo $books = array('azb' => 'ABC', 'buk' => 'Primer', 'slov' => 'Slovník'); Druhá možnosť sa používa, keď prvok potrebuje explicitne špecifikovať kľúčové pole (relevantné pre asociatívne polia). Ak nie je zadané, kľúče prvkov poľa budú predvolene nastavené na čísla. Počnúc od 0 (nula).
  2. $knihy = 'ABC'; $books = 'Primer'; $books = 'Primer';

V oboch prípadoch bude $books pole. Takže ak sa s takýmito konštrukciami stretnete v kóde vašej stránky, už to pre vás nebude nič nepochopiteľné 🙂

Ak sa chcete dozvedieť viac o poliach php, odporúčam vám pozrieť si nasledujúce video:

Dovoľte mi pripomenúť, že ak chcete na obrazovke vidieť štruktúru poľa, musíte po deklarovaní poľa v kóde lokality napísať nasledujúcu konštrukciu:

ozvena"

"; print_r(array_var); die();

Ak je premenná, ktorú vytlačíte, pole, text bude začínať nasledujúcim riadkom:

pole (...

A ešte pár slov k téme nášho článku - triedenie políphp.

Ako viete, údaje v poliach sú štruktúrované a prvky sú usporiadané v určitom poradí. Aby sme to zmenili, stačí zoradiť pole php, ktoré je implementované hotovými jazykovými funkciami.

Preto všetko, čo musíme urobiť, je zavolať požadovanú funkciu po deklarácii poľa a zadať ju ako parameter.

Prejdime k prehľadu samotných funkcií.

php funkcie triedenia poľa

Ich úplný zoznam je uvedený v oficiálnej dokumentácii jazyka php:

Ak chcete zoradiť pole php pomocou špecifickej funkcie, budete ho musieť zavolať po deklarovaní poľa a jeho naplnení hodnotami, pričom ako parametre uvediete naše pole. Napríklad:

$cars = array("Toyota", "Mazda", "Mitsubishi"); sort($cars);

Stručne zvážime funkčnosť každého z nich. Funkcie budú špecifikované vo formáte, v akom ich bude potrebné volať v kóde, t.j. "meno(parameter1, parameter2, ...);".

Po volaní funkcie nezabudnite vložiť „;“, pretože bez toho sa na obrazovke objaví krásna chybová hláška 🙂

Ako názorný príklad si vezmime jednoduché jednorozmerné pole, v ktorom kľúče aj hodnoty nebudú usporiadané tak, aby výsledky vykonávania funkcií boli vizuálnejšie a zrozumiteľnejšie.

Pole ( => 11 => 18 => 9)

Ako teda môžete zoradiť pole v správnom poradí v php?

Funkcie jednoduchého poľa php zoradené podľa hodnoty

Ak uprednostňujete sledovanie video materiálu pred čítaním, potom by som vám rád odporučil pozrieť si toto video, ktoré jasne a jasne demonštruje prácu funkcií triedenia poľa php z tohto bloku:

Ak máte aj potom ďalšie otázky, podrobnejšie informácie o každej funkcii nájdete nižšie.

sort($pole, $vlajka); je jednou z najjednoduchších a najžiadanejších funkcií. Umožňuje zoradiť pole vo vzostupnom poradí v php, berúc do úvahy hodnoty prvkov, t.j. budú zoradené od najmenšej hodnoty po najväčšiu. Ako parametre berie premennú poľa a jeden z príznakov triedenia, čo vám umožňuje zmeniť správanie pri triedení.

Zoznam vlajok:

  • SORT_REGULAR - prvky sa porovnávajú bez zmeny typov
  • SORT_NUMERIC - prvky sa porovnávajú ako čísla
  • SORT_STRING - prvky sa porovnávajú ako reťazce
  • SORT_LOCALE_STRING - porovnanie reťazcov, ale berúc do úvahy aktuálne miestne nastavenie.
  • SORT_NATURAL – reťazcové porovnanie prvkov s ohľadom na ich prirodzené poradie (ako natsort)
  • SORT_FLAG_CASE - triedenie prvkov poľa PHP bez ohľadu na veľkosť písmen (možno kombinovať so SORT_STRING alebo SORT_NATURAL bitovým ALEBO).

Ale vo väčšine prípadov je výsledok vykonania funkcie správny aj bez týchto špecifikujúcich príznakov. Štandardne (ak nie je zadané nič) sa použije SORT_REGULAR.

Naše testovacie pole po volaní funkcie sort() bude vyzerať takto:

Pole ( => 9 => 11 => 18)

Ako vidíte, po zoradení poľa podľa hodnôt sa zmenili aj hodnoty ich kľúčov, pretože sort funguje bez zachovania vzťahu kľúč-hodnota, ako je uvedené v oficiálnej php dokumentácii.

Vďaka tomu je táto možnosť vhodná pre veľkú väčšinu prípadov.

sort($pole, $vlajka); je funkcia, ktorá je svojho druhu antagonistom. Antagonista, pretože zoraďuje pole rovnako, len nie vzostupne, ale zostupne, t.j. prvky poľa php s najväčšími hodnotami pôjdu ako prvé.

Môžete mu odovzdať aj dva parametre: samotné pole a príznak zoradenia a podobne ako zoradenie je vhodnejšie pre jednorozmerné polia. Naše testovacie pole po volaní tejto funkcie bude mať nasledujúcu formu:

Pole ( => 18 => 11 => 9)

sort($pole, $vlajka); je php funkcia na triedenie poľa podľa hodnoty, ktorej mechanizmus je tiež veľmi podobný triedeniu.

S jedinou výnimkou, že umožňuje triediť pole php podľa hodnoty jeho prvkov pri zachovaní vzťahu kľúč-hodnota.

Táto funkcia je teda skvelá pre php triedenie asociatívnych polí, t.j. štruktúry, kde je toto spojenie logické a dôležité.

Prvky budú usporiadané vzostupne, pretože umožňuje vám zoradiť asociatívne pole php podľa hodnoty so zachovaním kľúčov.

Môžete tiež zadať dva parametre. Naše testovacie pole bude vyzerať takto:

Pole ( => 9 => 11 => 18)

Ako vidíte, rozdiel od triedenia je iba v uložení kľúčov hodnôt, podľa ktorých je pole php zoradené. Toto sa nazýva udržiavanie vzťahu kľúč-hodnota, čo je neuveriteľne dôležité pri triedení asociatívnych polí php.

arsort($pole, $vlajka); je ďalšia funkcia php na triedenie poľa podľa hodnoty. Druh antagonistov.

Funguje na rovnakom princípe ako spomínaná funkcia, len triedenie php poľa bude v tomto prípade v zostupnom poradí. Tiež skvelá možnosť pri triedení php asociatívnych polí.

Po zavolaní tejto funkcie bude náš príklad vyzerať takto:

Pole ( => 18 => 11 => 9)

Pokročilé funkcie triedenia poľa php podľa hodnoty

Tento blok funkcií, na rozdiel od predchádzajúcich, ktoré vám umožňovali meniť poradie v zostupnom/vzostupnom poradí, vám umožní pridať rozmanitosť a usporiadať prvky v iných postupnostiach, než je „tradičné“.

Táto vlastnosť ich robí vhodnými na riešenie rôznych neštandardných úloh, niekedy veľmi zaujímavých 🙂

natsort($array);- táto funkcia prináša rozmanitosť do rodiny triediacich riešení, od r mechanizmus jeho práce sa od nich zásadne líši. natsort má iba jeden jediný vstupný parameter - je to pole, ktoré sa má triediť, ktorého hodnoty budú usporiadané v poradí, ktoré je osobe známe. Takýto algoritmus sa nazýva „prirodzené usporiadanie“, čo v ruštine znamená „prirodzený poriadok“. Aby sme pochopili význam tohto tvrdenia, vezmeme si ako príklad iné pole:

Pole ( => študent5 => študent1 => študent10)

Okrem toho funkcia natsort zachováva vzťah kľúč – hodnota. Preto jeho prácu porovnáme s asortom, ktorý je mu čo najviac podobný. Po zavolaní posledného bude mať naše pole nasledujúcu formu:

Pole ( => študent1 => študent10 => študent5)

Ak zavoláte natsort, výsledné pole bude takéto:

Pole ( => študent1 => študent5 => študent10)

Myslím, že rozdiel je teraz na vás viditeľný a princíp natsortu vám bude jasný :-)

shuffle($array);- úžasná a veľmi užitočná funkcia, pomocou ktorej môžete zamiešať php pole a umiestniť jeho prvky v náhodnom poradí.

Je to veľmi výhodné, keď potrebujete umiestniť tovar internetového obchodu do kategórie alebo na inú stránku v náhodnom poradí, alebo keď prejdete na stránku s vizitkami, zobrazíte používateľom rôzne bloky informácií zakaždým v inom poradí.

V tomto prípade sa vzťah kľúč – hodnota nezachová. To znamená, že pole, ktoré sme použili v predchádzajúcom príklade, pre mňa osobne malo tvar:

Pole ( => študent10 => študent5 => študent1)

Navyše po každom volaní funkcie bude poradie prvkov odlišné.

Funkcie, ktoré sme predtým zvážili, sú pomerne jednoduché a mechanizmus ich práce je jasný. Pole sa odovzdá ako parameter, ktorého obsah musí byť zoradený podľa hodnôt jeho prvkov, ako aj príznak, ktorý môže zmeniť správanie pri triedení (bez neho sa môžete bezpečne zaobísť).

Medzi programátormi je pomerne populárny, pretože. umožňuje pomocou svojej funkcie vyriešiť akúkoľvek úlohu súvisiacu s triedením (pomocou rôznych algoritmov).

Jednou z týchto úloh je php v požadovanom poli.

Ak chcete napríklad vizuálne ukázať, ako fungujú nasledujúce funkcie, vezmite si nasledujúce pole:

Pole ( => Pole ( => 32) => Pole ( => 11) => Pole ( => 27))

Ako vidíte, je multidimenzionálny, pretože jeho prvkami sú polia, ktorých štruktúra je identická: všetky majú pole s kľúčom „id“. A teraz je našou úlohou zoradiť tieto prvky vzostupne, t.j. takže prvky v hlavnom poli sú umiestnené v súlade s hodnotou polí v podpoliach.

Netreba dodávať, že ide o pomerne bežný problém. Nasledujúce funkcie nám to pomôžu vyriešiť:

usort($array, 'funkcia');- PHP funkcia na triedenie viacrozmerného poľa podľa požadovaného poľa.

Umožňuje triediť prvky poľa php bez zachovania vzťahu kľúč-hodnota v súlade s používateľom definovanou funkciou, ktorej názov sa odovzdáva ako druhý parameter pri volaní usort.

Samotná funkcia je popísaná samostatne. V našom príklade, aby sme zoradili prvky viacrozmerného poľa php podľa poľa ['id'] vo vzostupnom poradí, by vlastná funkcia vyzerala takto:

Funkcia myCmp($a, $b) ( if ($a["id"] == $b["id"]) vráti 0; vráti $a["id"] > $b["id"] ? 1 : - jeden ;)

Všetko, čo teraz potrebujeme, aby sme mohli začať triediť, je zavolať na usort($array, 'myCmp'); na správnom mieste v kóde. Určuje názov premennej poľa ako prvý parameter.

V dôsledku toho dostaneme nasledovné:

Pole ( => Pole ( => 11) => Pole ( => 27) => Pole ( => 32))

uasort($pole, 'funkcia');- ďalšia funkcia php na triedenie viacrozmerného poľa podľa požadovaného poľa.

Funguje podobne ako usort, ale zachováva si vzťah kľúč-hodnota, vďaka čomu je vhodný na triedenie viacrozmerných asociatívnych polí.

Vlastná funkcia pre náš príklad bude rovnaká. Výsledky jeho vykonania budú vyzerať takto:

Pole ( => Pole ( => 11) => Pole ( => 27) => Pole ( => 32))

Ak chcete zmeniť poradie zoradenia prvkov a vykonať nejaké ďalšie transformácie údajov, bude potrebné upraviť vlastnú funkciu, ako ste možno sami uhádli 🙂

Napríklad, ak vaše polia, ktoré sú prvkami zdroja, budú obsahovať pole [‚name‘] s hodnotou reťazca, potom bude vlastná funkcia na triedenie viacrozmerného poľa php podľa tohto poľa vo vzostupnom poradí vyzerať takto:

Funkcia myCmp($a, $b) ( if (strcasecmp($a["meno"], $b["osoba"]["meno"]) == 0) vráti 0; vráti strcasecmp($a["meno "], $b["meno"]) > 0 ? 1: -1; )

Triedenie php polí pomocou vlastných funkcií nie je najjednoduchšia možnosť, ale je veľmi flexibilné v prispôsobení a ak si ho osvojíte, stane sa vašim obľúbeným riešením.

array_multisort($pole1, $pole2, $príznak);- nakoniec som uložil najstrašnejšiu a najobskúrnejšiu php funkciu na triedenie poľa. Ako vstupy sú potrebné dve polia a rovnaké príznaky triedenia, ktoré môžete zadať pomocou funkcií podobných triedeniu. Array_multisort funguje nasledovne: prvý parameter je pole, ktoré sa má triediť, druhé pole je poradie triedenia prvého poľa, po ktorom je druhé pole zoradené analogicky s prvým. Namiesto poľa reprezentujúceho poradie triedenia môžete použiť konštanty SORT_DESC na zoradenie poľa v zostupnom poradí a SORT_ASC vo vzostupnom poradí. K všetkému tomuto zmätku môžete stále pridať príznaky triedenia, ktoré môžu nasledovať po všetkých poliach.

$knihy = pole(32, 11, 27); $sort_array = pole(1, 2, 3); array_multisort($books, $sort_array);

V tomto príklade som zoradil jednoduché jednorozmerné pole $books podľa poľa $sort_array. Výsledkom bolo, že prvé pole malo nasledujúci tvar:

Pole ( => 11 => 27 => 32)

A druhý dopadol takto:

Pole ( => 2 => 3 => 1)

To znamená, že je zoradený podľa prvého. Tu je taká petržlenová vňať 🙂

Viac informácií o array_multisort nájdete v nasledujúcom videu. Nájdete tam aj ďalšie príklady jeho použitia:

Túto funkciu možno použiť aj na triedenie viacrozmerných polí:

$knihy = pole(pole(32), pole(11), pole(27)); $sort_array = pole(1, 2, 3); array_multisort($books, $sort_array);

Pole $books bude vyzerať takto:

Pole ( => Pole ( => 11) => Pole ( => 27) => Pole ( => 32))

Zároveň v tejto funkcii môžete zadať niekoľko polí zoradených podľa niekoľkých polí. V tomto prípade výsledky zoradenia predchádzajúcich polí ovplyvnia nasledujúce, čo nakoniec povedie k zoradeniu toho najnovšieho podľa rôznych kritérií.

Tu je taký druh "snehovej gule" v php.

Pri triedení poľa php pomocou tejto funkcie sa vzťah kľúč – hodnota zachová pre asociatívne polia, ale nie pre číselné polia.

Programátori, ktorí testovali fungovanie rôznych funkcií, poznamenávajú, že pri triedení viacrozmerného poľa vykazuje php array_multisort lepšie výsledky ako usort.

Ale array_multisort nebude schopný zvládnuť všetky úlohy, ktoré dokáže usort. Napríklad to isté triedenie viacrozmerného poľaphp podľa povinného poľa. Takže v každom jednotlivom prípade musíte analyzovať svoje šance na úspech pri použití jedného alebo druhého dizajnu.

Osobne môžem povedať, že sa mi pole array_multisort trochu nepáči kvôli jeho zložitosti a zvýšenému namáhaniu mozgu, ktoré prichádza so snahou reprezentovať výsledné pole zoradené pomocou neho.

Preto sa ho snažím zbytočne nepoužívať, uprednostňujem usort a jednoduchšie funkcie, k čomu odporúčam aj vám 🙂

Funkcie, o ktorých sme hovorili vyššie, vám umožňujú triediť polia v php podľa hodnoty prvkov. Poďme sa porozprávať o tom, ako môžete vykonať podobnú akciu na klávesoch prvkov.

Funkcie PHP na triedenie poľa podľa kľúča

Skôr než prejdeme k prehľadu funkcií tejto skupiny, rád by som povedal, že všetky majú jedno spoločné – všetky si udržiavajú vzťah kľúč – hodnota. Inak to vlastne ani nemohlo byť, lebo. potom by nemali zmysel.

Takáto je vlastnosť. Zvážme každú funkciu podrobnejšie.

ksort($pole, $príznak);- funkcia je analógom druhu, iba radenie prvkov v poli sa nevyskytuje podľa hodnôt, ale podľa kľúčov.

Tento konštrukt má dva vstupné parametre: pole php na triedenie a jeden z príznakov triedenia, ktorých úplný zoznam nájdete v popise funkcie triedenia (je voliteľný). Táto funkcia php vám umožňuje triediť pole vo vzostupnom poradí.

Aby sme demonštrovali jeho prácu, vráťme sa k príkladu opísanému na samom začiatku článku:

Pole ( => 11 => 18 => 9)

Ak ho zoradíte pomocou ksort, potom bude mať nasledujúcu formu:

Pole ( => 18 => 9 => 11)

Myslím, že všetko je jednoduché a jasné.

krssort($pole, $príznak);- ďalšia funkcia php na triedenie poľa podľa kľúča, veľmi podobná predchádzajúcej.

Jediný rozdiel je v tom, že zoraďuje pole php v zostupnom poradí. To znamená, že je antagonistom ksort, rovnako ako rsort je pre triedenie.

Má tiež dva vstupné parametre: pole, ktoré sa má triediť, a jeden z kľúčov. Po spustení bude náš príklad vyzerať takto:

Pole ( => 11 => 9 => 18)

Myslím, že komentáre sú zbytočné 🙂

ukrsort($pole, 'funkcia');- analóg vyššie uvedenej php funkcie na triedenie poľa podľa kľúča - usort.

Funguje na rovnakom princípe: zachováva vzťah kľúč-hodnota a pole php je zoradené podľa užívateľom definovanej funkcie, ktorej názov sa odovzdáva ako druhý parameter. Prvý parameter je nemenný - je to pole, ktoré sa má triediť.

Rozdiel od usort je v tom, že triedenie prebieha podľa kľúčov prvkov.

Na ilustráciu fungovania tejto funkcie použijeme nasledujúci príklad:

Pole ( => 40 => 0 => 10)

Napríklad potrebujeme zoradiť pole php podľa kľúča vo vzostupnom poradí. V tomto prípade bude vlastná funkcia vyzerať takto:

Funkcia myCmp($a, $b) ( ak ($a == $b) vráti 0; vráti $a< $b ? 1: -1; }

V dôsledku toho bude naše pole vyzerať takto:

pole ( => 0 => 10 => 40)

Jednoznačným plusom použitia tejto funkcie je, že ju možno použiť na triedenie poľa php podľa nejakej nezvyčajnej funkcie alebo algoritmu.

Pripomínam vám, že ho musíte použiť iba vtedy, keď kľúče prvkov poľa nesú nejaký druh sémantickej záťaže. V opačnom prípade je lepšie použiť usort alebo iné jednoduchšie funkcie.

Náš článok sa teda skončil (ako keby ste sa dočítali až sem) 🙂

Snažil som sa v ňom čo najjednoduchšie a zároveň prehľadne a úplne opísať všetky možné spôsoby triedenia rôznych typov polí v php, pričom som svoje slová umocnil príkladmi.

Priznám sa, že publikácia mi vyšla dosť objemná a na jedno prečítanie náročná. Ale vždy, keď potrebujete php triedenie poľa, v tomto článku si vždy môžete pozrieť popis funkcie, ktorú potrebujete, a pozrieť si príklady jej použitia.

Dúfam, že informácie boli pre vás užitočné 🙂

Prihláste sa na odber aktualizácií projektu a

Vďaka svojej sile a flexibilite vo svojej práci sa polia stali nepostrádateľným atribútom PHP. Navyše v mnohých zložitých situáciách môžete použiť aj dvojrozmerné polia PHP. Tento článok je o triedení viacrozmerných polí v PHP.

Komponenty:

  • Viacrozmerné pole;
  • Zabudované funkcie PHP usort () , uasort () alebo uksort () ;
  • Vstavané funkcie PHP strcasecmp() alebo strcmp() .

Implementácia:
Povedzme, že máme pole:

$students = pole (1 => pole ("meno" => "Jack", "známka" => 98,5), 2 => pole ("meno" => "Bill", "známka" => 90,1), 3 => pole ("meno" => "Chloe", "stupeň" => 94.0), 4 => pole ("meno" => "Taylor", "stupeň" => 95.1), 5 => pole ("meno" " => "Larry", "známka" => 94,6));

Tu môžete zoradiť dvojrozmerné pole PHP podľa parametra grade ( stupňa) (číselné triedenie) alebo meno ( názov) (triedenie podľa abecedy).

Vonkajšie pole $students pozostáva z piatich prvkov, z ktorých každý je tiež reprezentovaný ako samostatné pole. Interné pole používa ako kľúč ID študenta a ukladá dve hodnoty: meno študenta a známku.

Na zoradenie viacrozmerného poľa definujeme vlastnú funkciu. Hovoríme PHP, že by sa malo používať na volanie vstavaných funkcií usort () , uasort () alebo uksort () .

Funkcia, ktorú definujete, musí mať dva parametre a vrátiť hodnotu označujúcu, ktorý parameter je na prvom mieste v zozname. Záporná alebo nepravdivá hodnota znamená, že prvý parameter je zadaný pred druhým. Pozitívne alebo pravdivé – že druhý parameter je na prvom mieste. Hodnota nula (0) znamená, že obe možnosti sú rovnaké.

A – Triediť podľa stupňa (trieda parametrov) (číselné triedenie)

Definujme funkciu na triedenie poľa podľa skóre (parameter stupňa):

// Zoradiť podľa hodnotiacej funkcie: zoradiť v DESCING. function grade_sort($x, $y) ( if ($x[" grade "]< $y[" оценка "]) { return true; } else if ($x["оценка"] >$y["hodnotenie"]) ( návrat false; ) else ( návrat 0; ) )

Potom vezmeme užívateľom definovanú funkciu a pomocou prvého kľúča iterujeme dvojrozmerné pole PHP. Vyzerá to asi takto:

// $students je naše viacrozmerné pole a grade_sort je vygenerovaná funkcia usort($students, "grad_sort");

Príklad:

// Tlač poľa ako (počiatočné pole): echo "

Pole vo formulári

" .print_r($študenti, 1) ."
"; // Zoradiť podľa známky: uasort($students, "triediť_triediť"); echo "

Pole zoradené podľa skóre

" .print_r($študenti, 1) ."
";

PHP odošle interné polia tejto funkcii na ďalšie triedenie. Ak vás zaujíma, ako sa to všetko deje podrobne, zobrazte výsledky porovnávania hodnôt vo vnútri funkcie. A po vytvorení dvojrozmerného poľa PHP zmeňte samotnú funkciu takto:

function grade_sort($x, $y) (statický $count = 1; echo “

Iterácia $count: ($x['estimate']) vs. ($y['skóre'])

n“; $pocet++; if ($x[‘ hodnotenie ‘]< $y[‘ оценка ‘]) { return true; } else if ($x[‘ключ1′] >$y['key1']) ( return false; ) else ( return 0; ) )

Po zobrazení hodnôt $x['score'] a $y ['score'] , môžete vidieť, ako sa volá funkcia triedenia definovaná používateľom.

Funkciu grade_sort môžete skrátiť takto:

// Funkcia pre číselné triedenie podľa stupňa: triedenie v DESCING funkcii grade_sort($x, $y) ( return ($x["grade"]< $y["grade"]); }

výsledky PHP 2D triedenie poľa Hodnotenie je zobrazené na obrázku nižšie:

Poznámka: Funkcia usort() triedi podľa hodnôt, ale neukladá kľúče ( pre externé pole). Ak sú potrebné kľúče, potom je lepšie použiť funkciu uasort().

B - Zoradiť podľa názvu (abecedne)

Aby sme zoradili pole $students podľa prvého kľúča, musíme porovnať dva reťazce. Preto v príklade s triedením v abecednom poradí použijeme funkciu strcasecmp() ( nerozlišuje veľké a malé písmená) a strcmp() ( rozlišovať malé a veľké písmená). Výsledný dvojrozmerné pole PHP bude vyzerať takto:

// Funkcia triedenia podľa názvu: function name_sort($x, $y) ( return strcasecmp($x["name"], $y["name"]); )

Príklad:

// Tlač poľa ako (počiatočné pole): echo "

Pole vo formulári

" .print_r($študenti, 1) ."
"; // Zoradiť podľa názvu: uasort($students, "name_sort"); echo "

Pole zoradené podľa názvu

" .print_r($študenti, 1) ."
";

Snímka obrazovky nižšie zobrazuje výsledok triedenia podľa názvu:


Preklad článku " Triedenie viacrozmerného poľa v PHP» pripravil priateľský projektový tím.

Polia sú veľmi vhodné na spracovanie veľkého množstva informácií. Pre pohodlnú prácu s nimi je k dispozícii veľké množstvo funkcií. Najmä dnes budeme hovoriť o triedení. Nebudem otvárať nič nové, len vám predstavím to najnutnejšie pre denné kódovanie.

Triedenie indexovaných polí: sort() a rsort()

Funkcia sort() triedi hodnoty v indexovanom poli vo vzostupnom poradí. To znamená, že A je pred Z, 0 je pred 9. Veľké písmená sú pred malými písmenami, písmená sú pred číslami. Napríklad:

$myArray = pole(1, 2, "a", "b", "A", "B"); sort($myArray); // Zobrazenie "A B a b 1 2" foreach ($myArray ako $val) echo "$val ";

rsort() je sort() naopak:

$myArray = pole(1, 2, "a", "b", "A", "B"); sort($myArray); // Zobrazenie "2 1 b a B A" foreach ($myArray ako $val) echo "$val ";

Všetky funkcie triedenia vrátia hodnotu true pri úspechu a nepravdu pri neúspechu.)

Triedenie asociatívnych polí: asort() a arsort()

sort() a rsort() sú veľmi dobré pre indexované polia, kde sa nemusíte starať o asociáciu kľúč/hodnota. Môžu nastať prekvapenia) Napríklad:

$movie = array("title" => "Zadné okno", "režisér" => "Alfred Hitchcock", "rok" => 1954, "minúty" => 112); sort($film); // Zobrazenie "Pole ( => Alfred Hitchcock => Zadné okno => 112 => 1954)" print_r($movie);

Je vidieť, že nastal zmätok a zmenila sa pôvodná štruktúra „názov“, „riaditeľ“, „rok“ a „zápisnica“.

Ak chcete zoradiť asociatívne pole podľa primárneho kľúča, použite funkcie asort() a arsort() Tieto funkcie zohľadňujú vzťah kľúčov a ich hodnôt

Funkcia asort() je zodpovedná za vzostupné zoradenie:

$movie = array("title" => "Zadné okno", "režisér" => "Alfred Hitchcock", "rok" => 1954, "minúty" => 112); sort($film); // Zobrazí "Pole ( => Alfred Hitchcock => Zadné okno => 112 => 1954)" print_r($movie);

arsort() je opak:

$movie = array("title" => "Zadné okno", "režisér" => "Alfred Hitchcock", "rok" => 1954, "minúty" => 112); pole($film); // Zobrazí "Pole ( => 1954 => 112 => Zadné okno => Alfred Hitchcock)" print_r($movie);

Triedenie asociatívnych polí podľa kľúča: ksort() a krsort()

ksort() zoraďuje vzostupne podľa hodnoty kľúča, krsort() zoraďuje zostupne. Podobne ako asort() s arsort(), aj táto funkcia zachováva vzťah kľúč – hodnota. Príklad:

$movie = array("title" => "Zadné okno", "režisér" => "Alfred Hitchcock", "rok" => 1954, "minúty" => 112); // Zobrazí "Pole ( => Alfred Hitchcock => 112 => Zadné okno => 1954)" ksort($movie); print_r($film); // Zobrazenie "Pole ( => 1954 => Zadné okno => 112 => Alfred Hitchcock)" krsort($movie); print_r($film);

Triedenie zložitých a viacrozmerných polí pomocou array_multisort()

Veľmi výkonná funkcia array_multisort() dokáže triediť viacrozmerné pole pri zachovaní vzťahu medzi poľami.
Vo všeobecnosti teraz uvidíme všetko:

Triedenie zložitých polí

Triedenie pomocou array_multisort(), stačí zadať polia, ktoré sa majú triediť:

$directors = array("Stanley Kubrick", "Alfred Hitchcock", "Martin Scorsese"); $titles = array("Celokovová bunda", "Zadné okno", "Stredné ulice"); $roky = pole(1987, 1954, 1973); array_multisort($riaditelia, $tituly, $roky); print_r($directors); ozvena"
"; print_r($titles); echo "
"; print_r($roky); echo "
";

Tento kód zobrazí:

Array ( => Alfred Hitchcock => Martin Scorsese => Stanley Kubrick)
Pole ( => Zadné okno => Stredné ulice => Celokovová bunda)
Pole ( => 1954 => 1973 => 1987)

Prvá array_multisort() zoradí hodnoty v $directors vo vzostupnom poradí, potom ďalšie 2 vo vzostupnom poradí.

Čo ak však chceme zoradiť napríklad tak, že prvý „titul“? Stačí umiestniť $titles pred zoznam:

Array_multisort($tituly, $riaditelia, $roky);

Ak prvé pole obsahuje určitý počet identifikačných čísel, potom pole_multisort() zoradí
podľa týchto hodnôt prvé pole, potom druhé atď. Príklad:

$directors = array("Stanley Kubrick", "Alfred Hitchcock", "Martin Scorsese", "Stanley Kubrick"); $titles = array("Celokovová bunda", "Zadné okno", "Stredné ulice", "Mechanický pomaranč"); $roky = pole(1987, 1954, 1973, 1971); array_multisort($riaditelia, $tituly, $roky); print_r($directors); ozvena"
"; print_r($titles); echo "
"; print_r($roky); echo "
";

Tento kód vytvára nasledovné – všimnite si, že „A Clockwork Orange“ je pred „Full Metal Jacket“:

Array ( => Alfred Hitchcock => Martin Scorsese => Stanley Kubrick => Stanley Kubrick)
Pole ( => Zadné okno => Stredné ulice => Mechanická oranžová => Celokovová bunda)
Pole ( => 1954 => 1973 => 1971 => 1987)

Zmena poradia zoradenia

Ak chcete zmeniť poradie zoradenia, môžete vynechať (voliteľný) argument príznaku za argumentom poľa:

SORT_ASC
Zoradiť vzostupne
SORT_DESC
zostupné zoradenie

Tu zoradíme $directors vo vzostupnom poradí, potom $titles v zostupnom poradí:

$directors = array("Stanley Kubrick", "Alfred Hitchcock", "Martin Scorsese", "Stanley Kubrick"); $titles = array("Celokovová bunda", "Zadné okno", "Stredné ulice", "Mechanický pomaranč"); $roky = pole(1987, 1954, 1973, 1971); array_multisort($riaditelia, SORT_ASC, $tituly, SORT_DESC, $roky); print_r($directors); ozvena"
"; print_r($titles); echo "
"; print_r($roky); echo "
";

Tu je výsledok: všimnite si, že „Full Metal Jacket“ je teraz pred „A Clockwork Orange“:


Array ( => Alfred Hitchcock => Martin Scorsese => Stanley Kubrick => Stanley Kubrick)
Pole ( => Zadné okno => Stredné ulice => Celokovová bunda => Mechanická oranžová)
Pole ( => 1954 => 1973 => 1987 => 1971)

Triedenie viacrozmerných polí

Triedenie pomocou array_multisort() prechádza cez prvý prvok každého poľa. Ak sú 2 hodnoty rovnaké, triedenie pokračuje podľa 2. prvku atď.

Toto je príklad, ktorý ukazuje, ako to funguje
Triedenie prebieha podľa režiséra, potom podľa názvu, potom podľa roku:

$movies = array(array("director" => "Alfred Hitchcock", "title" => "Zadné okno", "rok" => 1954), array("director" => "Stanley Kubrick", "title" => "Full Metal Jacket", "year" => 1987), array("director" => "Martin Scorsese", "title" => "Mean Streets", "year" => 1973), array("director" " => "Stanley Kubrick", "titul" => "Clockwork Orange", "rok" => 1971)); array_multisort($filmy); ozvena"

"; print_r($filmy); echo "
";

výsledok:


pole
=> pole
=> Alfred Hitchcock
=> Zadné okno
=> 1954
)

=> pole
=> Martin Scorsese
=> Stredné ulice
=> 1973
)

=> pole
=> Stanley Kubrick
=> Mechanický pomaranč
=> 1971
)

=> pole
=> Stanley Kubrick
=> Celokovová bunda
=> 1987
)

Ako vidíte, array_multisort() zoradila pole podľa riaditeľa. Keď sa zopakovalo meno režiséra („Stanley Kubrick“), zoradenie išlo podľa názvu.

Ak chcete triediť v opačnom poradí, zadajte príznak SORT_DESC ako druhý argument funkcie array_multisort(). Len!

Výsledok

V tomto návode sme sa pozreli na jednoduché funkcie PHP na triedenie poľa:

* sort() a rsort() na triedenie indexovaných polí
* asort() a arsort() na triedenie asociatívnych polí
* ksort() a krsort() na triedenie asociatívnych polí podľa kľúča
* array_multisort() na triedenie na triedenie zložitých a viacrozmerných polí

PHP triedenie polí je veľmi výkonné a jednoduché, môžete triediť rýchlo a akokoľvek chcete). Len tu sme študovali až 13 funkcií! Viac viď

______________

Narazil som tu na zaujímavý blog - blog o blogoch, takpovediac) Autor robí recenzie)

Prihláste sa na odber adresára blogov

array_reverse

Usporiadanie prvkov poľa v opačnom poradí.
Syntax:

Array array_reverse(pole arr [, bool protect_keys])

Funkcia array_reverse() vracia pole, ktorého prvky sú v opačnom poradí ako pole odovzdané v parametri. V tomto prípade sa prepojenia medzi kľúčmi a hodnotami nestratia, ak je dodatočný parameter protect_keys = TRUE.

Príklad použitia funkcie array_reverse():

$vysledok = array_reverse($vstup);
$result_keyed = array_reverse($vstup, pravda);
?>

Tento príklad vytvorí polia $result aj $result_keyed s rovnakými hodnotami, ale odlišnými kľúčmi. Zoznam polí $result a $result_keyed bude nasledujúci:

Pole(
=> pole
=> zelená
=> červená
)

=> 4
=> php
Pole(
=> pole
=> zelená
=> červená
)

=> 4
=> php
)

Poznámka: Druhý parameter protect_keys bol pridaný v PHP 4.0.3.

natcasesort

Vykoná prirodzené triedenie poľa, pričom sa nerozlišujú veľké a malé písmená.
Syntax:

Void natcasesort (pole arr)

Funkcia natcasesort() triedi pole arr v prirodzenom ľudskom poradí, pričom zachováva asociácie indexov.
Táto funkcia je podobná funkcii natsort(), až na to, že nerozlišuje veľké a malé písmená.
Príklad použitia funkcie natcasesort():

"img2.png", "img1.png", "IMG3.png");

sort($pole1);

print_r($pole1);

natcasesort($array2);
echo "nPrirodzene triedenie (nerozlišujú sa malé a veľké písmená)n";
print_r($pole2);
?>

Vyššie uvedený príklad zobrazí nasledovné:

Štandardné triedenieArray(
=> IMG0.png
=> IMG3.png
=> img1.png
=> img10.png
=> img12.png
=> img2.png
)

Prirodzené zoradenie (nerozlišujú sa malé a veľké písmená)
Pole(
=> IMG0.png
=> img1.png
=> img2.png
=> IMG3.png
=> img10.png
=> img12.png
)

Funkcia podporovaná PHP 4, PHP 5

Vlastné triedenie asociatívneho poľa pri zachovaní asociácií indexov.
Syntax:

bool uasort(pole arr, funkcia cmp_function)

Funkcia uasort() triedi pole arr, pričom zachováva asociácie indexov, pomocou užívateľom definovanej funkcie špecifikovanej argumentom cmp_function na porovnanie indexov prvkov.
Táto funkcia sa používa hlavne vtedy, keď je nevyhnutné porovnávanie indexov a hodnôt poľa.
Funkcia uasort() vráti hodnotu true, ak bolo triedenie úspešné, a v opačnom prípade vráti hodnotu false.
Poznámka: Pozrite si funkcie usort() a uksort() na písanie vlastnej funkcie.
Podporované funkcie PHP 3 >=3.0.4, PHP 4, PHP 5

Vlastné triedenie poľa podľa kľúčov.
Syntax:

bool uksort(pole arr, funkcia cmp_function)

Funkcia uksort() triedi pole arr podľa indexov, pričom zachováva asociácie indexov, pomocou užívateľom definovanej funkcie špecifikovanej v argumente cmp_function na porovnanie indexov prvkov. Tejto funkcii sa odovzdajú dva indexy prvkov na porovnanie a musí vrátiť kladné alebo záporné číslo alebo 0.

Funkcia uksort() vráti hodnotu true, ak bolo triedenie úspešné, a v opačnom prípade vráti hodnotu FALSE.
Pomerne často musíme niečo triediť podľa zložitejších kritérií ako len podľa abecedy. Napríklad, nechajte $Files uložiť zoznam názvov súborov a podadresárov v aktuálnom adresári. Tento zoznam možno budeme chcieť vypísať nielen v lexografickom poradí, ale aj tak, aby všetky adresáre boli pred súbormi. V tomto prípade by sme mali použiť funkciu uksort() po napísaní porovnávacej funkcie s dvoma parametrami, ako to vyžaduje uksort().

1 príklad použitia funkcie uksort():

// Táto funkcia by mala porovnať hodnoty $f1 a $f2 a vrátiť:
// -1 ak $f1<$f2,
// 0, ak $f1==$f2
// 1, ak $f1>$f2
// Pod< и >rozumieme nasledujúcim z týchto mien vo funkcii výstupného zoznamu FCmp($f1,$f2)
( // Adresár vždy predchádza súboru
if(is_dir($f1) && !is_dir($f2)) return -1;
// Súbor vždy nasleduje za adresárom
if(!is_dir($f1) && is_dir($f2)) return 1;
// Inak porovnaj lexigraficky
if($f1<$f2) return -1; elseif($f1>$f2) návrat 1; inak vráti 0;
}
// Nech $Files obsahuje pole s kľúčmi - názvy súborov
// v aktuálnom adresári. Sort it.uksort($Files,"FCmp"); //odovzdať funkciu triedenia "

array_multisort()

Triedenie viacerých polí alebo viacrozmerných polí (PHP 4, PHP 5)

Popis:

bool pole_multisort(pole ar1[, zmiešané pole[, zmiešané ... [, pole ...]]])

Funkciu array_multisort() možno použiť na triedenie viacerých polí naraz alebo jedného viacrozmerného poľa podľa jednej alebo viacerých dimenzií. Táto funkcia zachováva zhodu medzi kľúčmi a ich zodpovedajúcimi hodnotami.

Vstupné polia sa považujú za stĺpce tabuľky, ktoré sa majú triediť riadok po riadku, podobne ako pri výraze SQL ORDER BY. Prvé pole má v procese triedenia prioritu.

Štruktúra argumentov tejto funkcie je trochu nezvyčajná, ale pohodlná. Prvý argument musí byť pole. Nasledujúce argumenty môžu byť buď polia alebo hodnoty špecifikujúce poradie zoradenia uvedené v zozname nižšie.

Hodnoty, ktoré definujú poradie zoradenia:

SORT_ASC - triedenie vo vzostupnom poradí
SORT_DESC - triedenie v zostupnom poradí

Príznaky typu zoradenia:

SORT_REGULAR - porovnávanie prvkov normálnym spôsobom
SORT_NUMERIC - porovnáva prvky, ako keby to boli čísla
SORT_STRING – porovnáva prvky, ako keby to boli reťazce

Zadávať dva príznaky zoradenia rovnakého typu po každom poli je nezákonné. Príznaky zoradenia odovzdané za argumentom ar1 sa vzťahujú iba na tento argument - predtým, ako funkcia pokračuje s ďalším poľom, tieto príznaky sa vrátia na predvolené hodnoty SORT_ASC a SORT_REGULAR.

Triedenie viacerých polí

$ar1 = pole("10", 100, 100, "a");
$ar2 = pole(1, 3, "2", 1);
array_multisort($ar1, $ar2);

Vo vyššie uvedenom príklade bude prvé pole po zoradení obsahovať 10, "a", 100, 100. Druhé pole bude obsahovať 1, 1, "2", 3. Prvky druhého poľa zodpovedajúce identickým prvkom prvý (100 a 100 ) bude tiež zoradený.

Triedenie viacrozmerného poľa

$ar = pole(pole("10", 100, 100, "a"), pole(1, 3, "2", 1));
array_multisort($ar, SORT_ASC, SORT_STRING,
$ar, SORT_NUMERIC, SORT_DESC);

Vo vyššie uvedenom príklade bude prvé pole po zoradení obsahovať 10, 100, 100, "a" (jeho prvky boli zoradené vzostupne, ako keby to boli reťazce) a druhé pole bude obsahovať 1, 3, "2 " , 1 (prvky zoradené ako čísla v zostupnom poradí).

Zoradiť pole podľa hodnoty pomocou vlastnej funkcie na porovnanie prvkov (PHP 3 >= 3.0.3, PHP 4, PHP 5)

Popis:

bool usort (pole &pole, spätné volanie cmp_function)

Táto funkcia triedi prvky poľa pomocou užívateľom definovanej funkcie na porovnanie hodnôt. Ak potrebujete triediť pole podľa neobvyklého kritéria, mali by ste použiť túto funkciu.

Funkcia použitá na porovnanie musí vrátiť celé číslo menšie, rovné alebo väčšie ako nula, ak je prvý argument menší, rovný alebo väčší ako druhý.

Poznámka: Ak sú dva prvky pôvodného poľa rovnaké, ich poradie v zoradenom poli nie je definované. Pred PHP 4.0.6 užívateľom definované funkcie zachovávali poradie takýchto prvkov v pôvodnom poli, ale nový triediaci algoritmus zavedený vo verzii 4.1.0 už toto riešenie nepoužíva a nemá žiadne iné efektívne.

Pri úspechu vráti TRUE alebo pri chybe FALSE.

príklad usort().

funkcia cmp($a, $b)
{
ak ($a == $b) (
návrat 0;
}
vrátiť ($a)

$a = pole(3, 2, 5, 6, 1);

usort($a, "cmp");

while (zoznam($kľúč, $hodnota) = každý($a)) (
echo "$key: $value
";
}
?>

0: 1
1: 2
2: 3
3: 5
4: 6

Komentujte: Pre tento triviálny prípad je zjavne vhodnejšie triediť ().

Príklad použitia funkcie usort() pre viacrozmerné polia

funkcia cmp($a, $b)
{
return strcmp($a["ovocie"], $b["ovocie"]);
}

$fruits["ovocie"] = "citróny";
$fruits["fruit"] = "jablká";
$fruits["ovocie"] = "hrozno";

usort($ovocie, "cmp");

while (zoznam($kľúč, $hodnota) = každý($ovocie)) (
echo "\$ovocie[$kľúč]: " . $value["ovocie"] . "
";
}
?>

Pri triedení viacrozmerného poľa obsahujú premenné $a a $b odkazy na prvé dva indexy poľa.

Výsledok spustenia tohto príkladu:

$ovocie: jablká
$ovocie: hrozno
$ovocie: citróny

Príklad použitia usort() s metódou triedy

trieda TestObj(
var$meno;

funkcia TestObj($name)
{
$toto->meno = $meno;
}

/* Toto je funkcia statického porovnávania: */
funkcia cmp_obj($a, $b)
{
$al = strtolower($a->meno);
$bl = strtolower($b->meno);
if ($al == $bl) (
návrat 0;
}
návrat ($al > $bl) ? +1: -1;
}
}

$a = new TestObj("c");
$a = new TestObj("b");
$a = new TestObj("d");

usort($a, array("TestObj", "cmp_obj"));

foreach ($a ako $item) (
echo $item->name . "
";
}
?>

Výsledok spustenia tohto príkladu:

B
c
d

Miešanie prvkov poľa.
Syntax:

Void shuffle (array arr)

Funkcia shuffle() „zamieša“ zoznam, ktorý jej odovzdá prvý parameter arr, takže jeho hodnoty sú rozdelené náhodne. Zároveň sa mení samotné pole a asociatívne polia sú vnímané ako zoznamy.
Príklad použitia funkcie shuffle():

$cisla = rozsah(1, 20);
srand((float)mikročas() * 1000000);
shuffle($čísla);
while (zoznam(, $číslo) = každý($čísla)) (
echo "$číslo";
}

Poznámka: Od PHP 4.2.0 už nie je potrebné inicializovať generátor náhodných čísel pomocou funkcií srand().
alebo mt_srand(), pretože sa to teraz robí automaticky.
Podporované funkcie PHP 3 >= 3.0.8, PHP 4, PHP 5

Zoraďte pole vo vzostupnom poradí.
Syntax:

bool sort(array arr [, int sort_flags])

Funkcia sort() je navrhnutá na triedenie polí vo vzostupnom poradí.
Poznámka: Táto funkcia mení tlačidlá triedených hodnôt. Tie. táto funkcia považuje akékoľvek asociatívne pole za zoznam. Po objednaní sa postupnosť kľúčov zmení na 0,1,2,... a hodnoty sa prerozdelia podľa potreby. Ako vidíte, väzby medzi parametrami key=>value nie sú zachované, navyše kľúče jednoducho zmiznú, takže triediť čokoľvek iné ako zoznam je sotva vhodné.
Príklad použitia funkcie sort():

sort($ovocie);
reset($ovocie);

echo "ovocie[" . $kľúč. "] = " . $val. "n";
}
?>

Tento príklad vypíše:

Ovocie = applefruits = bananafruits = lemonfruits = pomaranč


;
SORT_NUMERIC - porovnáva prvky ako čísla;
SORT_STRING Porovnáva prvky ako reťazce.

Zoradiť pole v zostupnom poradí.
Syntax:

bool rsort(pole poľa[, int sort_flags])

Funkcia rsort() triedi pole v zostupnom poradí (od najvyššieho po najnižšie).

Funkcia pri úspechu vráti TRUE a v opačnom prípade FALSE.
Príklad použitia funkcie rsort():

sort($ovocie);
reset($ovocie);
while (zoznam($kľúč, $val) = každý($ovocie)) (
echo "$key = $valn";
}
?>

Tento príklad vypíše:

0 = oranžová
1 = citrón
2 = banán
3 = jablko

Argument sort_flags určuje nasledujúce príznaky zoradenia:
SORT_REGULAR – porovnáva prvky „tak, ako sú“
Podporované funkcie PHP 3, PHP 4, PHP 5

Zoradiť asociatívne pole vo vzostupnom poradí.
Syntax:

bool asort(array arr [, int sort_flags])

Funkcia asort() triedi pole zadané ako jeho parameter tak, aby jeho hodnoty boli v abecednom (ak sú to reťazce) alebo vzostupnom (pre čísla) poradí. Zároveň sú zachované väzby medzi kľúčmi a ich zodpovedajúcimi hodnotami, t.j. niektoré páry kľúč=>hodnota jednoducho „plávajú“ na vrchol a niektoré – naopak, „padajú“.

Funkcia vráti hodnotu true pri úspechu a hodnotu false pri chybe.
Príklad použitia funkcie asort():

"citrón", "a" => "pomaranč", "b" => "banán", "c" => "jablko");
asort($ovocie);
reset($ovocie);
while (zoznam($kľúč, $val) = každý($ovocie)) (
echo "$key = $valn";
}
?>

Príklad vypíše nasledovné:

C=jablko=banán=citrón=pomaranč

Pole $fruits bolo zoradené vo vzostupnom poradí znakov, pričom indexy poľa zostali nedotknuté.



Podporované funkcie PHP 3, PHP 4, PHP 5

Zoraďte asociatívne pole v zostupnom poradí.
Syntax:

bool arsort(array arr [, int sort_flags])

Funkcia arsort() triedi pole arr v zostupnom poradí, pričom zachováva asociácie indexov.
Táto funkcia sa používa hlavne tam, kde je dôležité poradie prvku v poli.
Funkcia vráti hodnotu true v prípade úspešného zoradenia a hodnotu false v prípade chyby.
Príklad použitia funkcie arsort():

"citrón", "a"=>"pomaranč", "b"=>"banán", "c"=>"jablko");
arsort($arr);
reset($arr);
while(zoznam ($kľúč, $val) = každý ($arr)) (
echo "$kľúč = $stena";
}

Príklad vypíše:

A=pomaranč=citrón=banán=jablko

Pole $arr bolo zoradené v zostupnom poradí znakov, pričom indexy poľa zostali nedotknuté.
Spôsob triedenia je možné zmeniť pomocou voliteľného parametra sort_flags.
Táto možnosť môže určiť, ako porovnávať hodnoty (ako reťazce alebo ako čísla). Môže nadobúdať nasledujúce preddefinované hodnoty:
SORT_REGULAR - normálne porovnanie hodnôt;
SORT_NUMERIC - porovnať ako čísla;
SORT_STRING - porovnať ako reťazce.
Táto možnosť bola zavedená v PHP od verzie 4.
Podporované funkcie PHP 3, PHP 4, PHP 5

Zoradiť pole vo vzostupnom poradí kľúčov.
Syntax:

bool ksort(array arr [, int sort_flags])

Funkcia ksort() triedi pole vo vzostupnom poradí kľúčov, pričom zachováva vzťahy kľúč-hodnota. Táto funkcia je užitočná najmä pri triedení asociatívnych polí.
Funkcia vráti hodnotu true, ak všetko prebehlo dobre, a v opačnom prípade vráti hodnotu false.
Príklad použitia funkcie ksort():

"citrón", "a"=>"pomaranč", "b"=>"banán", "c"=>"jablko");
ksort($ovocie);
reset($ovocie);
while (zoznam($kľúč, $val) = každý($ovocie)) (
echo "$key = $valn";
}
?>

Tento príklad vypíše:

A=pomaranč=banán=jablko=citrón

Argument sort_flags určuje nasledujúce príznaky zoradenia:
SORT_REGULAR – porovnáva prvky „tak, ako sú“
SORT_NUMERIC - porovnáva prvky ako čísla SORT_STRING - porovnáva prvky ako reťazce
Podporované funkcie PHP 3, PHP 4, PHP 5

Zoradenie poľa v zostupnom poradí indexov.
Syntax:

bool krsort(array arr [, int sort_flags])

Funkcia krsort() triedi kľúče v poli arr v opačnom poradí. V tomto prípade sa zachová množstvo kľúčov a hodnôt. Táto funkcia je užitočná pri triedení asociatívnych polí.
Funkcia vráti hodnotu true, ak je úspešná, v opačnom prípade vráti hodnotu false.
Príklad použitia funkcie krsort():

"citrón", "a"=>"pomaranč", "b"=>"banán", "c"=>"jablko");
krssort($ovocie);
reset($ovocie);
while (zoznam($kľúč, $val) = každý($ovocie)) (
echo "$key = $valn";
}
?>

Tento príklad vypíše:

D=citrón=jablko=banán=pomaranč

Argument sort_flags určuje nasledujúce príznaky zoradenia:
SORT_REGULAR – porovnáva prvky „tak, ako sú“
SORT_NUMERIC - porovnáva prvky ako čísla SORT_STRING - porovnáva prvky ako reťazce
Podporované funkcie PHP 3 >= 3.0.13, PHP 4, PHP 5

Vykoná „prirodzené“ zoradenie poľa.
Syntax:

Void natsort (pole arr)

Funkcia natsort() triedi pole arr v prirodzenom ľudskom poradí, pričom zachováva asociácie indexov.
Príklad použitia funkcie natsort():

sort($pole1);
echo "Štandardné triedenie";
print_r($pole1);

natsort($array2);
echo "nNatural sortn";
print_r($pole2);
?>

Tento príklad vypíše nasledovné:

Štandardné triedenieArray(
=> img1.png
=> img10.png
=> img12.png
=> img2.png
)

Prirodzené triedenieArray(
=> img1.png
=> img2.png
=> img10.png
=> img12.png
)

Funkcia podporovaná PHP 4, PHP 5

Je zrejmé, že môže existovať potreba triedenie poľa podľa kľúčových hodnôt. Napríklad, ak máme pole rezervovať dáta, ako v príklade vyššie, je pravdepodobné, že chceme triediť knihy od autorov. Aby ste to urobili v PHP, nemusíte písať veľa riadkov kódu - môžete jednoducho použiť funkciu ksort() pre triedenie vzostupne (priamy poriadok triedenie) alebo krssort()- za triedenie zostupne (v opačnom poradí) triedenie). Syntax týchto funkcií je opäť podobná syntaxi funkcie zoradiť ().

$books = array("Puškin"=>"Ruslan a Ľudmila",

"Tolstoy" => "Vojna a mier",

"Lermontov"=>"Hrdina našej doby");

// zoradiť pole,

// ukladanie hodnôt kľúča

print_r($knihy);

Príklad 7.9. Triedenie poľa podľa kľúčov (html , TXT )

Array ([Lermontov] => Hrdina našej doby

[Puškin] => Ruslan a Ľudmila

[Tolstoj] => Vojna a mier)

Triedenie pomocou funkcie definovanej používateľom

Okrem dvoch jednoduchých spôsobov triedenie hodnôt poľa(zostupne alebo vzostupne) PHP ponúka používateľovi možnosť nastaviť kritériá pre triedenieúdajov. Kritérium je špecifikované pomocou funkcie, ktorej názov je špecifikovaný ako argument pre špeciálne funkcie triedenieusort() alebo uksort(). Podľa názvov týchto funkcií to môžete uhádnuť usort()zoraďujehodnoty prvkov pole, a uksort()hodnotykľúče poľa pomocou užívateľom definovanej funkcie. Obe funkcie vrátia hodnotu true if triedenie uspel a v opačnom prípade falošný. Ich syntax je nasledovná:

usort (pole, funkcia triedenia)

uksort (pole, funkcia triedenia)

Samozrejme, že nemôžete triediť pole s akoukoľvek vlastnou funkciou. Táto funkcia musí spĺňať určité kritériá, aby umožnila porovnanie prvkov pole. Ako by mala byť usporiadaná funkcia triedenia? Po prvé, musí mať dva argumenty. V nich bude tlmočník odovzdávať dvojice hodnoty prvky pre funkciu usort() alebo kľúče poľa pre funkciu uksort(). Po druhé, funkcia triedenia musí vrátiť:

    celé číslo menšie ako nula, ak je prvý argument menší ako druhý;

    číslo rovné nule, ak sú dva argumenty rovnaké;

    číslo väčšie ako nula, ak je prvý argument väčší ako druhý.

Čo sa týka ostatných funkcií triedenie, za funkciu usort() existuje analóg, ktorý sa nemení hodnotykľúče, – funkcia uasort().

Príklad 7.10. Povedzme, že máme pole Obsahuje informácie o literárnych dielach, ako je názov, autor a rok vytvorenia. Knihy chceme triediť podľa dátumu vytvorenia.

// pole vyzerá takto:

$books = array("Hrdina našej doby" =>

pole ("Lermontov", 1840),

"Ruslan a Ludmila" => array("Pushkin",1820),

"Vojna a mier" => pole ("Tolstoj", 1863),

"Idiot" => pole("Dostojevskij",1868));

/* toto pole môžete samozrejme prepísať

iným spôsobom, a to tak, že rok vydania napr.

index, ale oveľa pohodlnejšie je napísať si vlastný

funkcia na triedenie */

uasort($books,"cmp");

// triedenie poľa pomocou funkcie cmp

foreach ($books ako $key => $book) (

echo "$book: \"$key\"
";

funkcia cmp($a,$b)(

// funkcia, ktorá určuje spôsob triedenia

ak ($a< $b) return -1;

elseif ($a==$b) vráti 0;

Príklad 7.10. Triedenie pomocou funkcií definovaných používateľom (html , TXT )

V dôsledku toho dostaneme:

Puškin: "Ruslan a Lyudmila"

Lermontov: "Hrdina našej doby"

Tolstoy: "Vojna a mier"

Dostojevskij: "Idiot"

Aplikovali sme vlastnú funkciu triedenie všetkým prvkom pole. Ďalej zvážte ako použiť akúkoľvek inú vlastnú funkciu na prvky poľa.

Aplikácia funkcie na všetky prvky poľa

Funkcia array_walk(pole, funkcia [, údaje]) aplikuje užívateľom vytvorenú funkciu funkcie na všetky prvky pole pole a vráti hodnotu true, ak bola operácia úspešná, a v opačnom prípade vráti hodnotu false.

Používateľom definovaná funkcia má spravidla dva argumenty, ktoré sa striedavo odovzdávajú význam a kľúč každý prvok pole. Ale ak pri volaní funkcie array_walk() je zadaný tretí argument, bude sa s ním zaobchádzať ako s význam tretí argument užívateľom definovanej funkcie, ktorého význam si určuje užívateľ sám. Ak používateľská funkcia vyžaduje viac argumentov, ako sa jej odovzdá, potom je zavolaná vždy array_walk() bude vydané varovanie.

Ak potrebujete pracovať s real hodnoty pole, a nie s ich kópiami, mali by ste argument odovzdať funkcii odkazom. Majte však na pamäti, že nemôžete pridávať ani odstraňovať prvky pole a vykonávať činnosti, ktoré sa menia pole, keďže v tomto prípade výsledok prac array_walk() považované za nedefinované.

$books1 = array(

"A.S. Pushkin"=>"Ruslan a Ľudmila",

"L.N. Tolstoy"=>"Vojna a mier",

"M.Yu. Lermontov"=>"Hrdina našej doby");

function try_walk($val,$key,$data)(

echo "$data \"$val\" napísal $key
";

// $book1 try_walk funkcia

array_walk($books1,"try_walk","Romance");

Príklad 7.11. Aplikácia funkcie na všetky prvky poľa (html , TXT )

Román „Ruslan a Lyudmila“ napísal A.S. Puškin

Román "Vojna a mier" napísal L.N. Tolstoj

Román „Hrdina našej doby“

napísal M.Yu. Lermontov

Všimnite si, že sme sa nezmenili hodnoty pri živloch pole. Na ich zmenu bolo potrebné preniesť hodnoty na premennú $var funkcie try_walk odkazom.

$books1 = array(

"A.S. Pushkin"=>"Ruslan a Ľudmila",

"L.N. Tolstoy"=>"Vojna a mier",

"M.Yu. Lermontov"=>"Hrdina našej doby");

// vytvoríme funkciu, ktorú chceme

// platí pre prvky poľa

function try_walk(&$val,$key)(

$key = "

$val = "Meno: \"" . $val ."\"

";

// platí pre všetky prvky poľa

// $book1 try_walk funkcia

array_walk($books1,"try_walk");

print_r($knihy1);

Príklad 7.12. Aplikácia funkcie na všetky prvky poľa. Možnosť 2 (html , TXT )

V dôsledku skriptu dostaneme:

Názov: "Ruslan a Lyudmila"

Názov: Vojna a mier

Názov: "Hrdina našej doby"

Pole ([A.S. Pushkin] =>

Názov: "Ruslan a Lyudmila"

[L.N. Tolstoj] =>

Názov: Vojna a mier

[M.Yu. Lermontov] =>

Názov: "Hrdina našej doby"

Výber podpolia

funkcia array_slice

Pretože pole- toto je množina prvkov, je pravdepodobné, že z nej budete musieť vybrať nejakú podmnožinu. PHP má na tento účel funkciu. pole_slice. Jeho syntax je:

pole_slice (pole,

číslo_prvku [, dĺžka])

Táto funkcia prideliť podpole dĺžka dĺžka pole pole začínajúce od prvku, ktorého číslo je určené číslom prvku. Kladné číslo prvku označuje poradové číslo prvku vzhľadom na začiatok pole, zápor - k číslu prvku od konca pole.

$arr = pole(1,2,3,4,5);

$sub_arr = array_slice($arr,2);

print_r($sub_arr);

vypíše pole ( => 3 => 4 => 5),

tie. podskupina pozostávajúca z prvkov

$sub_arr = array_slice($arr,-2);

print_r($sub_arr);

// výstup poľa ( => 4 => 5),

// t.j. podpole prvkov 4, 5

Príklad 7.13. Použitie funkcie array_slice() (html , TXT )

Ak pri použití nastavíte parameter dĺžky pole_slice, potom bude pridelené podpolie A, ktoré má presne toľko prvkov, koľko určuje tento parameter. Dĺžka môže byť aj záporná. V tomto prípade tlmočník odstráni z konca pole počet prvkov rovný modulu parametra dĺžky.

$arr = pole(1,2,3,4,5);

$sub_arr = array_slice($arr, 2, 2);

// obsahuje pole prvkov 3, 4

$sub = pole_slice($arr,-3, 2);

// tiež obsahuje pole prvkov 3, 4

$sub1 = pole_slice($pole,0, -1);

// obsahuje pole

// prvky 1, 2, 3, 4

$sub2 = array_slice($arr,-4, -2);

// obsahuje pole prvkov 2, 3

Príklad 7.14. Pomocou funkcie array_slice(). Možnosť 2 (html , TXT )

funkcia array_chunk

Existuje ďalšia funkcia podobná pole_slice()- toto je array_chunk(). Ona sa zlomí pole do niekoľkých podpolí danej dĺžky. Jeho syntax je takáto:

array_chunk (pole, veľkosť

[, save_keys])

V dôsledku práce array_chunk() vracia multidimenzionálny pole, ktorého prvkami sú výsledné podpolia. Ak nastavíte možnosť uloženia kľúče pravda, potom sa rozdelenie uloží kľúče počiatočné pole. Inak kľúče prvky sú nahradené číselnými indexmi, ktoré začínajú nulou.

Príklad 7.15. Máme zoznam hostí vo formáte ako pole ich priezviská. Máme stoly pre troch ľudí. Preto musíte všetkých pozvaných rozdeliť do troch.

$persons = array("Ivanov", "Petrov",

"Sidorov", "Zaitsev", "Volkov");

$triples = array_chunk($osoby,3);

// rozdelenie poľa na podpolia

// tri prvky

foreach ($trojnásobok ako $k => $table)(

// výstup výsledných trojíc

echo "Pri stole číslo $k sú:

    ";

    foreach ($table ako $pers)

    ozvena"

  • $os";

    ozvena"

";

Príklad 7.15. Použitiefunkciearray_chunk() (html , TXT )

V dôsledku toho dostaneme:

sediaci pri stole číslo 0:

Sidorovej

sedí pri stole číslo 1:

Zajcev

Volkovej

Súčet prvkov poľa

V tejto časti sa zoznámime s funkciou, ktorá počíta súčet všetkých prvkov poľa. Úloha výpočtovej techniky súčty hodnôt poľa extrémne jednoduché. Ale prečo písať ten istý kód znova a znova, ak môžete použiť špeciálne vytvorenú a vždy dostupnú funkciu. Táto funkcia sa nazýva, ako by ste mohli hádať, array_sum(). A ako parameter sa odovzdá iba názov pole,súčet hodnôt prvkov ktoré je potrebné vypočítať.

Ako príklad využitia tejto funkcie uvádzame riešenie zložitejšieho problému, ako je len výpočet súčty prvkov. Tento príklad tiež ilustruje použitie funkcie pole_slice() o ktorom sme diskutovali o niečo skôr.

Príklad 7.16. Nech je to dané pole prirodzené čísla. Je potrebné v ňom nájsť také číslo, ktoré súčet prvkov napravo od neho je súčet prvkov naľavo od neho.

//pole je dané funkciou poľa

$arr = pole(2,1,3,4,5,6,4);

// prechádza každý prvok poľa $arr.

// Vo vnútri cyklu aktuálny kľúč poľa

// obsiahnuté v premennej $k,

// aktuálna hodnota je v premennej $v

foreach ($arr ako $k => $val)(

// syntax pole array_slice(

pole poľa,int offset [,int dĺžka])

// pole_slice pridelí podpole

// dĺžka v poli poľa,

// počnúc prvkom offset.

$out_next = array_slice($arr,$p);

// prichádza po aktuálnom

$out_prev = array_slice($arr,0,$k);

// získajte pole prvkov,

// prichádza pred aktuálnym

// zmiešaná funkcia array_sum (pole poľa)

// vypočíta súčet prvkov poľa

$dalsi_sum = array_sum($out_next);

$prev_sum = array_sum($out_prev);

// ak je súčet prvkov pred aktuálnym

// súčet prvkov za, potom výstup

// hodnota aktuálneho prvku

if ($next_sum==$prev_sum)

echo "value:$val";

// môžete vidieť, čo sú zač

// zvažuje polia pri každom kroku

// print_r($out_next); ozvena"
";

// print_r($out_prev);

// echo "$next_sum, $prev_sum
";

ozvena"


";

Príklad 7.16. Program na nájdenie takého čísla, že súčet prvkov napravo od neho sa rovná súčtu prvkov naľavo od neho ( html , TXT )

Záver

Takže si to zhrňme. Na tejto prednáške sme sa naučili množstvo funkcií, ktoré uľahčujú prácu poliaúdajov. Pozreli sme sa na funkcie pre hľadanie hodnoty medzi prvkami poľa; funkcie pre triedenie prvkov poľa, podľa ich hodnoty, ako aj kľúče; funkcie, ktoré umožňujú použiť na všetky prvky poľa funkciu vytvorenú používateľom. Okrem toho sme študovali funkciu prideľovanie podpolí od živlov pole a funkcia, ktorá počíta súčet všetkých prvkov poľa. Použitie všetkých týchto funkcií bolo demonštrované na príkladoch. Všetky funkcie, s ktorými sa dá pracovať polia sú dostupné bez akýchkoľvek konfiguračných nastavení PHP a ich použitie je úplne zadarmo. Takže predtým, než znovu vynájdete koleso, nahliadnite do manuálu k jazyku PHP – je dosť možné, že to už urobil niekto pred vami.