Práce s datovými poli v php. Užitečné funkce pro práci s poli v PHP. Proč se $foo mýlí?

Nejnovější aktualizace: 1.11.2015

Pole jsou navržena pro ukládání sad dat nebo prvků. Každý prvek v poli má svůj vlastní jedinečný klíč a význam. Uložme tedy seznam modelů telefonů do pole:

Samsung Galaxy ACE II"; $phones = " Sony Xperia Z3"; $phones = "Samsung Galaxy III"; for($i=0;$i "; ?>

Zde je vytvořeno pole $phones se čtyřmi prvky. Každý prvek v poli představuje pár klíč–hodnota. Takže první prvek $phones = "Nokia N9" má klíč - číslo 0 a hodnotu - řetězec "Nokia N9". V takových polích se numerické klíče také nazývají indexy.

Použitím počítat funkce() můžete zjistit počet prvků v poli. A vzhledem k tomu, že klíče jsou v pořadí od 0 do 3, a se znalostí velikosti pole, můžete prvky pole zobrazit ve smyčce for.

Aby byl vztah mezi klíči a hodnotami prvků jasnější, vytiskneme pole pomocí funkce print_r:

Print_r($telefony);

Dostaneme následující výstup:

Pole ( => Nokia N9 => Samsung Galaxy ACE II => Sony Xperia Z3 => Samsung Galaxy III)

Toto vytvoření pole by také odpovídalo následujícímu:

"; ?>

Pokud není zadán klíč prvku, PHP používá jako klíče čísla. V tomto případě začíná číslování klíčů od nuly a každé nový klíč zvýší o jednu.

Když známe klíč prvku v poli, můžeme k tomuto prvku přistupovat, získat nebo změnit jeho hodnotu:

// získání prvku klávesou 1 $myPhone = $phones; echo "$myPhone
"; // přiřazení nové hodnoty $phones = "Samsung X650"; echo "$phones
";

Ale nejen celá čísla, ale také řetězce mohou být použity jako klíče:

Taková pole se také nazývají asociativní.

operátor pole

Jeden způsob, jak vytvořit pole, byl diskutován výše. Existuje však další, který zahrnuje použití operátoru array().

Operátor array() přebírá sadu prvků. Klíče zde také nejsou výslovně uvedeny. Proto PHP automaticky čísluje prvky od nuly. Ale můžeme také určit klíč pro každý prvek:

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); echo $phones["samsumg"]; ?>

Operace => umožňuje namapovat klíč na konkrétní hodnotu.

Iterace přes asociativní pole

Výše jsme se podívali na to, jak používat pro smyčku vytisknout všechny prvky pole, kde jsou klíče specifikovány postupně čísly od 0 do 3. asociativní pole to nejde. A pro ně je určeno PHP speciální typ smyčka - foreach...jako:

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); foreach($phones as $item) echo "$item
"; ?>

Ve smyčce foreach jsou všechny prvky postupně odstraněny z pole a jejich hodnota je umístěna do proměnné zadané za klíčovým slovem as. V v tomto případě Všechny čtyři hodnoty z pole $phones jsou postupně umístěny do proměnné $item. Kdy bude vytěženo? poslední prvek z pole smyčka končí.

Smyčka foreach umožňuje načíst nejen hodnoty, ale také klíče prvků:

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); foreach($phones as $key=>$value) echo "$key => $value
"; ?>

Zde se při iteraci přes prvky smyčky klíč prvku přenese do proměnné $key a jeho hodnota se přenese do proměnné $value.

Alternativní foreach smyčka představuje použití seznamu a každé funkce:

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); while (list($key, $value) = každý($phones)) echo "$key => $value
"; ?>

Cyklus while poběží, dokud se nevrátí každá funkce hodnota nepravda. Každá funkce projde všemi prvky pole $phones a vrátí jej jako pole obsahující klíč a hodnotu prvku. Toto pole je pak předáno seznam funkcí a přiřadí hodnoty pole proměnným v závorkách. Když každá funkce dokončí iteraci přes prvky pole $phones, vrátí false a akce zatímco smyčka bude dokončena.

Vícerozměrná pole

V předchozích příkladech byla uvažována pouze jednorozměrná pole, kde hodnoty prvků představovaly čísla nebo řetězce. Ale v PHP pole mohou být také vícerozměrné, tedy takové, kde prvek pole je sám polem. Vytvořme například vícerozměrné pole:

array("iPhone5", "iPhone5s", "iPhone6") , "samsumg"=>array("Samsung Galaxy III", "Samsung Galaxy ACE II"), "nokia" => array("Nokia N9", "Nokia" Lumia 930"), "sony" => pole ("Sony XPeria Z3", "Xperia Z3 Dual", "Xperia T2 Ultra")); foreach ($phones as $brand => $items) ( echo "

$značka

"; echo"
    "; foreach ($items jako $key => $value) ( ​​echo "
  • $hodnota
  • ";) echo"
"; } ?>

A při výstupu dostaneme 4 seznamy:

Chcete-li získat přístup k danému prvku, musíte také zadat klíče v hranaté závorky. Podívejme se například na první prvek v prvním poli. Protože klíč prvního pole je "apple" a klíč prvního prvku v prvním poli je číslo 0 (protože jsme klíče explicitně nespecifikovali):

Echo $phones["jablko"];

Druhý prvek třetího pole můžete získat podobným způsobem:

Echo $telefony["nokia"];

Řekněme, že vnořená pole představují také asociativní pole:

array("apple" => "iPhone5", "samsumg" => "Samsung Galaxy III", "nokia" => "Nokia N9"), "tablety" => array("lenovo" => "Lenovo IdeaTab A3500" , "samsung" => "Samsung Galaxy Tab 4", "apple" => "Apple iPad Air")); foreach ($technics jako $tovar => $items) ( echo "

$produkt

"; echo"
    "; foreach ($items jako $key => $value) ( ​​echo "
  • $klíč: $hodnota
  • ";) echo"
"; ) // přiřadit jinou hodnotu jednomu z prvků $technics["phones"]["nokia"] = "Nokia Lumnia 930"; // zobrazení této hodnoty echo $technics["phones"]["nokia" ];

Navzdory skutečnosti, že pole jsou poměrně jednoduchá na pochopení, mnoho lidí má při setkání s nimi potíže. Proto jsem se rozhodl napsat něco málo o polích, abych nad nimi rozptýlil stín nejistoty. Mohu říci, že pole jsou jedním z těch prvků, bez kterých se v programování prostě neobejdete. Zjednodušují spoustu věcí a činí kód čitelnějším a srozumitelnějším a mohou vám také ušetřit čas při psaní tohoto kódu. Proč? Jak? Teď ti všechno řeknu.

Co je pole?
Pokud se neobtěžujete a vysvětlíte jasným jazykem, pak pole je proměnná obsahující libovolný počet dalších proměnných a ty zase mohou být pole. Pole tedy může být jednoduše gigantické a může obsahovat mnoho informací. A díky PHP funkce pro práci s poli se s nimi velmi pohodlně pracuje. Třídění, čištění, hledání správných klíčů, třídění a mnoho dalšího.

Několik příkladů
Podívejme se na příklad:

$b = "test b" ; ?>

Zde jsme vytvořili dvě proměnné

1
2
3

$test_array [ "a" ] = "test a" ;
$test_array [ "b" ] = "test b" ; ?>

A zde jsme vytvořili pole $test_array a vytvořili 2 klíče s nějakými hodnotami.
Zpočátku se může zdát, že vše s polem vypadá poněkud těžkopádně, ale představme si situaci, kdy potřebujeme na obrazovce zobrazit 1000 proměnných. Pokud jsou to všechny samostatné proměnné, pak můžeme napsat celý list papíru, zatímco píšeme něco podobného

1
2
3
4
5

echo $b ;
echo $c ;
echo $d ;
... ?>

Ale pokud by všechny tyto proměnné byly klíče pole, pak bychom jednoduše napsali:

1
2
3

echo $hodnota ;
} ?>

Konstrukt foreach postupně prochází každým klíčem pole a $value obsahuje hodnotu aktuálního klíče pole. Je to opravdu pohodlné? A to je jen ten nejprimitivnější příklad.

Třídění dat
Jeden z nejvíce nejlepší způsoby použít pole znamená použít jej k třídění dat nebo ke spojení některých dat, abyste se později nepletli. Podívejme se na příklad aut. Řekněme, že máme 2 auta a každé z nich má dvě možnosti interiéru. A každý má 3 možné barvy.

1
2
3
4
5
6
7
8
9
10
11
12
13

"Machine1" => pole(
"salon1" => pole(
"color1" => "black" ,
"color2" => "red" ,
"barva3" => "zelená"
),
"salon2"
),
"Machine2" => pole(
//a tak dále
); ?>

Tímto způsobem získáme pole obsahující 2 klíče, stroj1 a stroj2. Každý z nich má dva salony a každý salon má 3 barvy. A k tomu všemu je velmi snadné se dostat. Například:

//vypíše "černá"?>

Vyhledávání
Jako u všech dat je v polích důležité vyhledávání a PHP poskytuje řadu funkcí pro vyhledávání v polích. Například funkce array_key_exists() kontroluje, zda je určitý klíč v poli, a funkce in_array() kontroluje, zda je v poli určitá hodnota. Pro ty, kteří ještě nepochopili, jsou všechna data v polích uložena ve tvaru klíč=hodnota

(pole v poli, matice)

Co je pole PHP?

Rád bych toto téma začal odříkanými příklady. Řekněme, že nějaké zvažujeme osoba. Má jméno, příjmení, adresa, telefonní číslo, pohlaví, výška, barva očí a tak dále. Informace o všech těchto bodech lze připsat řadě údajů o osobě.

Pole může být jiného typu, bez jakýchkoli specifik položek. Bude jen téma. Řekněme toto programování webu. A prvky budou jazyky - HTML, CSS, JavaScript, PHP, MySQL. Celkem je 5 prvků.

Na základě posledního příkladu předpokládejme pole:

programování webu
1. HTML
2.CSS
3. JavaScript
4.PHP
5. MySQL

Nyní se podívejte na tento příklad a analyzujte základní pojmy.

Pole v PHP je soubor sekvenčně umístěných dat stejného typu, souvisejících společným tématem, jejichž počet prvků je pevně daný.

Pole v tomto příkladu bude voláno programování webu.

Každý prvek má své pořadové místo, identifikátor.
Index(klíč pole) - buď pořadové číslo nebo textová hodnota, podle které lze prvek identifikovat.

Indexy ve výše uvedeném příkladu by byly číselná hodnota od 1 do 5. Při přístupu k indexu 2 uvidíme CSS.

Příklad pole v PHP

Nyní se podívejme na výše uvedený příklad v syntaxi PHP, nikoli v ruštině. Řekněme, že pole se bude nazývat kratší - web. Hranaté závorky vloží rejstřík.
Podívejme se na jednoduchý příklad pole, kde hodnoty indexu budou obsahovat číselné hodnoty a pole vytvoříme, jako bychom přiřazovali hodnoty proměnným.

$web="HTML";
$web="CSS";
$web="JavaScript";
$web="PHP";
$web="MySQL";

$web; // tato proměnná obsahuje pole s 5 prvky

// pro zobrazení jednoho z prvků pole stačí zadat index v poli
echo $web; // vypíše PHP

Jednorozměrné pole

INDEXOVÉ POLE

Výše jsme se s webovým programováním podívali pouze na příklad jednorozměrného pole.
Tímto způsobem se vytváří jen zřídka. Spíše vizuálně ukazuje strukturu pole. Častěji se uchýlí k jiné metodě.

$web=array("HTML","CSS","JavaScript","PHP","MySQL");
echo $web; // vypíše "HTML"
echo $web; // vypíše "JavaScript"
echo $web; // vytiskne "PHP"

Pokud chcete nastavit hodnoty indexu, musíte je zadat následovně. Znamení => je ukazatel pro přiřazení indexu k hodnotě nebo naopak k hodnotě indexu.

$web=array(1=>"HTML",2=>"CSS",3=>"JavaScript",4=>"PHP",5=>"MySQL");
echo $web; // HTML
echo $web; // CSS
echo $web; //PHP
V příkladu začíná počítání od 1. Proměnná s indexem 0 je tedy prázdná.

V následujícím příkladu nebudeme určovat index.

$day="pondělí"; // index 0
$day="úterý"; // 1
$day="středa"; // 2
$day="čtvrtek"; // 3
$day="Pátek"; // 4
Můžete vidět, že sekvenční plnění probíhá od začátku.

POLE PŘIPOJENÍ

Často je potřeba vytvořit písmenný index pro prvek pole. Jak jsem uvedl výše, takový rejstřík se musí skládat z latinských písmen a název musí být uzavřen v uvozovkách. Podívejme se na příklad člověka.

$user["nick"]="Logika";
$user["name"]="Pavel";
$user["age"]="25";
$user["sex"]="Muž";

$uživatel; // proměnná $user obsahuje pole se 4 prvky s písmennými indexy

// zobrazí prvek pole s uvedením jeho písmenného indexu
echo $web["jméno"]; // vytiskne "Pavel"
Jak vidíte, vše je docela jednoduché. Uvádíme pouze hodnotu indexu.

Dvourozměrné pole

Pokud vám unikla první část s jednorozměrným polem, důrazně vám doporučuji si ji přečíst.
Jednoduše řečeno, je to pole v poli. To znamená, že prvky velkého pole jsou různé. Taková pole značně zpomalují práci skriptu, načítání RAM, takže pro rychlé zpracování takových skupin dat byly vytvořeny Databáze (Co je databáze?), ale o tom později. Podívejme se na příklad dvourozměrného pole.

// pole s názvy částí světa
$m = array("Evropa","Asie","Afrika","Amerika","Austrálie a Oceánie");

// pole s názvy zemí
$s = array("Rusko","Ukrajina","Bělorusko","Kazachstán");

// pole s názvy velkých písmen
$с = array("Moskva","Kyjev","Minsk","Astana");

// vytvoří dvourozměrné pole Geography
$geografie = pole($m, $s, $c);
?>
Zahrnutá pole, jak jste si všimli, mohou mít různý počet prvků. Z části o jednorozměrných polích vyplývá, že každý prvek pole může mít index. Přiřaďme tedy každému zahrnutému poli jinou hodnotu.

Chcete-li to provést, rozbalte poslední řádek a napište jej následovně.

$geography = array("Části světa"=>$m, "Země"=>$s, "Hlavní města"=>$s);

Funkce pro práci s php poli

Foreach- cyklická funkce pro práci s poli, ve které je počet cyklů roven počtu prvků pole.

Vypadá to takto: PHP kód

Foreach (pole jako $key=>$value)
týmy;
No hned ukázka práce

// vytvořte pole se slavným IT
$names["Ritchie"] = "Dennis";
$names["Thompson"] = "Ken";
$names["Gates"] = "Bill";
$names["Jobs"] = "Steve";

Foreach ($names jako $key => $value) (
echo "$hodnota $klíč";
}
?>
Skript se zobrazí na obrazovce

Dennis Ritchie
Ken Thompson
Bill Gates
Steve Jobs
Počítat- funkce, která vrací počet prvků v poli.

Echo count($names); // v našem příkladu s IT vrátí hodnotu 4
Seřadit- funkce, která třídí prvky pole. Vhodné pro číselné hodnoty indexu.
Arsort- funkce, která třídí prvky pole v opačném pořadí.

Seřadit($jména); // seřadí v pořadí. Je vhodné, pokud jsou v Indexu čísla
arsort($jména); // řazení v obráceném pořadí. To znamená, že podle indexů budou prvky v pořadí 3, 2, 1, 0
Nenastaveno- funkce, která odstraňuje prvek pole.

Unset($array); // odstranění prvku pole s indexem 2
unset($array); // smazání celého pole
Array_search- vyhledávací funkce v poli. Má dva argumenty. Jednoduše řečeno, má array_search("co", kde)

$animals="pes";
$animals="kočka";
$animals="pták";
echo array_search("kočka",$zvířata); // zobrazí index prvku - číslo 2
Zamíchat- funkce, která zamíchá klíče hodnot pole.

Shuffle($animals); // uspořádání prvků v náhodném pořadí
Děkuji za pozornost!

Pole je kolekce objektů, které mají stejnou velikost a typ. Každý objekt v poli je volán prvek pole. Vytvoření nového pole v PHP je snadné. Při deklaraci indexovaného pole se za název proměnné umístí dvojice hranatých závorek ():

$languages ​​​​= "španělština";

// $languages ​​​​= "španělština"

Poté můžete do pole přidat nové prvky, jak je znázorněno níže. Upozorňujeme, že nové prvky jsou přidávány bez explicitního určení indexu. V tomto případě je nový prvek přidán na pozici rovnající se délce pole plus 1:

$languages ​​​​= "Angličtina"; // $1anguages[l] = "Angličtina";

$languagest ] = "Gaelština"; // $languages ​​​​= "Gaelština";

Kromě toho lze na konkrétní pozici v poli přidat nové prvky. Chcete-li to provést, zadejte index prvního prvku:

$languages ​​​​= "Italština";

$languages ​​​​= "Francouzština";

Asociativní pole se vytvářejí podobným způsobem:

$languages["Španělsko"] = "Španělština";

$languages["Francie"] = "francouzština";

Při vytváření polí se používají tři standardní jazykové konstrukce:

  • pole();
  • seznam();
  • rozsah().

Ačkoli všechny tři případy vedou ke stejnému výsledku, vytvoření pole, v některých případech může být jeden návrh výhodnější než ostatní. Níže jsou uvedeny popisy a příklady použití jednotlivých návrhů.

funkce array() získá nulu nebo více prvky a vrátí pole sestávající ze zadaných prvků. Jeho syntaxe je:

pole pole ([prvek1, prvek2...])

Array() je pravděpodobně jen více vizuální zkratka pro vytváření pole, která se používá pro pohodlí programátora. Níže je uveden příklad použití array() k vytvoření indexovatelného pole:

$languages ​​​​= array("Angličtina". "Gaelština". "Španělština");

// $languages ​​​​= "Angličtina". $languages ​​​​= "Gaelština",

// $languages ​​​​= "španělština"

Zde je návod, jak se pole() používá k vytvoření asociativních polí:

$languages ​​​​= array("Španělsko" => "španělština",

"Irsko" => "Gaelština".

"Spojené státy americké" => "angličtina");

// $languages["Spain"] = "španělština"

// $languages["Irsko"] = "Gaelština"

// $languages["United States"] = "Angličtina"

Asociativní pole jsou užitečná zejména v situacích, kdy číselné indexy nemají logickou shodu. Například v předchozím příkladu jsou názvy zemí zcela přirozeně spojeny s jazyky. Zkuste implementovat toto logické spojení pomocí čísel!

Konstrukt list() je podobný array(), ale jeho hlavním účelem je současně přiřadit hodnoty extrahované z pole více proměnným najednou. Syntaxe příkazu List():

neplatný seznam (proměnná1 [. proměnná2, ...])

Konstrukt list() je zvláště užitečný při čtení informací z databáze nebo souboru. Řekněme, že chcete formátovat a vydávat data načtená z textového souboru. Každý řádek souboru obsahuje informace o uživateli (jméno,

povolání a oblíbená barva); Komponenty záznamu jsou odděleny svislou čárou (|). Typický řádek vypadá takto:

Nino Sanzi|Profesionální golfista|zelená

Pomocí list() můžete napsat jednoduchou smyčku, která přečte každý řádek, přiřadí jeho komponenty proměnným a naformátuje a zobrazí data. Níže uvedený seznam ukazuje možnost současného přiřazení více proměnným pomocí list():

while ($line = fgets ($user_file. 4096)) :

// Rozdělení řetězce pomocí split().

// Komponenty jsou přiřazeny proměnným Sname. $occupation and Scolor.

seznam ($name, $occupation, $color) = split("|", $line);

// Formát a výstup dat

tisknout "Jméno: Jméno
";

tisknout "Povolání: Povolání
";

tisk "Oblíbená barva: Barva
";

Každý řádek souboru se přečte, naformátuje a vypíše následovně:

Jméno: Nino Sanzi

Povolání: profesionální golfista

Oblíbená barva: zelená

Ve výše uvedeném příkladu závisí použití list() na rozdělení řetězce na prvky pomocí funkce split(). Prvky vzniklé dělením jsou přiřazeny k proměnným $name, $occupation a $color. Pak už to všechno přijde na formátování dat pro výstup v konkrétním prohlížeči. Pohodlné nástroje pro lexikální analýzu textových souborů jsou jednou ze silných stránek PHP. Toto téma je podrobně popsáno v kapitolách 7 a 8.

Konstrukce range() vám umožňuje rychle a snadno vytvořit pole celých čísel z rozsahu definovaného horní a dolní hranicí. Range() vrací pole sestávající ze všech celých čísel v zadaném rozsahu. syntaxe range():

rozsah pole (int dolní_mez, int horní_mez)

Následující příklad jasně ukazuje, jak pohodlný je tento design:

$loterie = rozsah(0,9);

// $lottery = array(0,1,2,3,4,5,6,7,8,9)

Jak je vidět z výše uvedeného fragmentu, parametry range() specifikovaly interval od 0 do 9 a pole $lottery bylo vyplněno celými čísly z tohoto intervalu.

Vícerozměrná pole

Postupem času se vaše programy stanou složitějšími a jednoduchá jednorozměrná pole nebudou stačit k uložení potřebných informací. Vícerozměrné pole(pole polí) poskytuje programátorovi efektivnější prostředky pro ukládání informací, které vyžadují další strukturování. Vytvoření vícerozměrného pole je snadné – stačí přidat další pár hranatých závorek, aby se pole dostalo do nové dimenze:

$šachovnice = "Král"; // Dvourozměrné pole

$capitals["USA"] ["Ohio"] = "Columbus": // Dvourozměrné pole

$streets["USA"]["Ohio"]["Columbus"] = "Harrison"; // Trojrozměrné pole

Jako příklad zvažte pole, které ukládá informace o dezertech a vlastnostech jejich přípravy. Bylo by docela obtížné vyjít s jednorozměrným polem, ale dvourozměrné pole se perfektně hodí:

$dezerty = аrrау(

"Ovocný pohár" => pole (

"kalorie" => "nízké",

"servírované" -> "studené",

"příprava" => "10 minut"

"Brownies" => pole (

"kalorie" -> "vysoké",

"served" => "zahřátý",

"příprava" => "45 minut"

Po vytvoření pole lze k jeho prvkům přistupovat pomocí odpovídajících kláves:

$desserts["Ovocný pohár"]["preparation"] // vrátí "10 minut"

$desserts["Brownies"]["calories"] // vrací "vysoké"

Přiřazování hodnot prvkům vícerozměrných polí se provádí stejným způsobem jako u jednorozměrných polí:

$desserts["Cake"]["calories"] = "příliš mnoho";

// Nastaví vlastnost "calories" objektu "Cake" na "too many"

Ačkoli vícerozměrná pole zavádějí nové úrovně logické organizace dat, vícerozměrná pole se vytvářejí v podstatě stejným způsobem jako jednorozměrná pole. Odkazy na vícerozměrná pole v řetězcích však vyžadují zvláštní pozornost; Tomuto tématu je věnována další část.

Odkazy na vícerozměrná pole

tisk "Brownies jsou dobré, ale obsah kalorií je ".

$dezerty["Brownies"]["kalorie"];

tisk „Brownies jsou dobré, ale obsah kalorií ano

($dezerty)";

Všimněte si absence uvozovek kolem kláves. Měli byste také pamatovat na to, že mezi složenými závorkami a článkem by neměly být žádné mezery navíc. Pokud není splněna alespoň jedna z těchto podmínek, dojde k chybě. Oba způsoby jsou však vhodné. Doporučuji zvolit jeden formát a toho se držet, aby vaše programy vypadaly konzistentněji. Li nepoužívejte U kterékoli z těchto metod formátování budou odkazy na vícerozměrná pole interpretovány doslovně, což pravděpodobně povede k neočekávaným výsledkům.

Hledání prvků pole

Hledání prvků je jednou z nejdůležitějších operací s poli. PHP má několik standardních funkcí, které usnadňují nalezení požadovaných klíčů a hodnot v poli.

Funkce i n_array() kontroluje, zda je daný prvek v poli přítomen. Pokud je hledání úspěšné, funkce vrátí hodnotu TRUE, jinak vrátí hodnotu FALSE. Syntaxe funkce in_array() je:

bool in_array(smíšený prvek, pole pole)

Tato funkce je obzvláště výhodná, protože při hledání požadovaného prvku nemusíte procházet celým polem. V následujícím příkladu funkce in_array() hledá prvek „Russian“ v poli $languages ​​​​:

$languages ​​​​= array("Angličtina", "Gaelština", "Španělština"):

$exists = in_array("Ruština", $languages); // $exists je nastaveno na FALSE

$exists = in_array("Angličtina", $languages): // $exists je nastaveno na TRUE

Funkce in_array() se často nachází v řídicích konstrukcích, kde se její návratová hodnota (TRUE/FALSE) používá k výběru jedné ze dvou možností pokračování. Následující příklad používá funkci in_array() k výběru jedné ze dvou možností v podmíněném příkazu if:

// Vstup uživatele

$language = "francouzština"; $email = " [e-mail chráněný]";

// Pokud je jazyk v poli přítomen

if (in_array($language. $languages)) :

// Přihlásit uživatele k odběru newsletteru.

// Poznámka: PHP nemá pojmenovanou standardní funkci

// subscribe_user(). V tomto příkladu tato funkce jednoduše simuluje

// proces předplatného.

subscribe_user($email, $jazyk);

tisknout "Nyní jste přihlášeni k odběru $language vydání newsletteru.";

// Jazyk není v poli

tisknout "Je nám líto, ale zatím nenabízíme $jazykové vydání zpravodaje".

Co se děje v tomto příkladu? Řekněme, že proměnné $language a $email obsahují vstup uživatele. Chcete se ujistit, že váš systém podporuje zadaný jazyk, a pro tento účel použijte funkci in_array(). Pokud je v poli uveden název jazyka, uživatel se přihlásí k odběru newsletteru a obdrží odpovídající zprávu. V opačném případě program hlásí, že newsletter není distribuován v určeném jazyce. Ve skutečném programu by uživatel samozřejmě neměl hádat, které jazyky váš program podporuje. Problém je vyřešen pomocí rozevíracího seznamu – téma podrobně rozebráno v kapitole 10. Zde tento příklad pouze demonstruje možnosti práce s poli.

Funkce array_keys() vrací pole obsahující všechny klíče původního pole předané jako parametr. Pokud volání předá další parametr search_item, vrátí se pouze klíče, které odpovídají dané hodnotě; jinak jsou vráceny všechny klíče pole. Syntaxe funkce array_keys() je:

pole pole_keys (pole pole [, smíšený vyhledávací_element])

Podívejme se na příklad použití funkce array_keys() k získání klíče daného prvku:

$great_wines = pole ("Austrálie" => "Clarendon Hills 96",

"Francie" => "Comte George de Vogue 97",

"Rakousko" => "Feiler Artinger 97");

$skvělé_štítky = array_keys($skvělá_vína);

// $great_labels = array("Austrálie", "Francie", "Rakousko");

$great_labels = array_keys($skvělá_vína, "Clarendon Hills 96");

// $great_labels = array("Austrálie");

Funkce array_keys() velmi usnadňuje získání všech klíčů asociativního pole – například v předchozím případě to byly názvy zemí, ve kterých se vyrábějí různé druhy vína.

Funkce array_values() vrací pole sestávající ze všech hodnot v původním poli předané jako parametr. Syntaxe funkce array_values() je:

pole hodnoty_pole (pole pole)

Vraťme se k předchozímu příkladu, kde byla k získání všech hodnot klíčů použita funkce array_keys(). Tentokrát funkce array_values() vrátí všechny hodnoty odpovídající klíčům:

// $great_wines = array ("Austrálie" => "Clarendon Hills 96",

// "Francie" => "Comte George de Vogue 97",

// "Rakousko" => "Feiler Artinger 97");

$skvělé_štítky = array_values($skvělá_vína);

// $great_labels = аrrау("Clarendon Hills 96",

// "Comte George de Vogue 97",

// "Feiler Artinger 97");

Funkce array_keys() a array_values() se vzájemně doplňují, což vám v případě potřeby umožňuje získat všechny součásti jedné nebo druhé strany asociativního pole.

Přidávání a odebírání prvků

Naštěstí v PHP nemusíte při vytváření pole zadávat maximální počet prvků. To vám poskytuje větší flexibilitu při práci s poli, protože se nemusíte obávat náhodného překročení pole, pokud počet prvků překročí očekávanou prahovou hodnotu. V PHP existuje několik funkcí pro zvětšení velikosti pole. Některé z nich byly vytvořeny pro pohodlí programátorů zvyklých pracovat s různými typy front a zásobníků (FIFO, FILO atd.), což se odráží v názvech funkcí (push, pop, shift a unshift). Ale i když nevíte, co je to „fronta“ nebo „zásobník“, nebojte se – na těchto funkcích není nic složitého.

Fronta je datová struktura, ze které jsou prvky načítány v pořadí, v jakém byly přijaty. Zásobník je datová struktura, ze které jsou prvky získávány v opačném pořadí, než v jakém přišly.

Funkce array_push() připojí (tj. připojí na konec pole) jeden nebo více nových prvků. Syntaxe funkce array_push() je:

int pole_push(pole pole, smíšený prvek [, ...])

Délka pole se zvyšuje přímo úměrně s počtem jeho prvků. To je ukázáno na následujícím příkladu:

$languages ​​​​= array("španělština", "angličtina", "francouzština");

array_push($languages, "ruština", "němčina", "gaelština");

// $languages ​​​​= array("španělština", "angličtina", "francouzština",

// "Ruština", "Němčina", "Gaelština")

Funkce array_push(), stejně jako mnoho standardních funkcí PHP, má „dvojitou“ funkci – funkci array_push(), která je navržena k načítání prvků z pole. Hlavní rozdíl mezi těmito funkcemi je v tom, že array_push() může přidávat více prvků najednou, zatímco array_push() odstraňuje prvky pouze jeden po druhém.

array_pop()

Výsledek funkce array_push() je přesně opačný než array_push() – tato funkce načte (tj. odstraní) poslední prvek z pole. Extrahovaný prvek je vrácen funkcí. Syntaxe funkce app_op():

array_pop(pole pole)

Při každém spuštění appray_pop() se velikost pole zmenší o 1. Podívejme se na příklad:

$languages ​​​​= array("španělština", "angličtina", "francouzština",

"Ruština", "Němčina", "Gaelština");

$a_language = array_pop($languages): // $a_language = "Gaelština"

$a_language = array_pop($languages): // $a_language = "němčina"

// $languages ​​​​= array ("španělština", "angličtina", "francouzština", "ruština");

Funkce array_push() a array_pop() jsou užitečné, protože umožňují provádět operace s prvky a řídit velikost pole, aniž byste se museli starat o neinicializované nebo prázdné prvky. Toto řešení funguje mnohem efektivněji než jakékoli pokusy programátora tyto faktory řídit.

Funkce array_shift() je podobná funkci array_shift() s jedním rozdílem: prvek je odstraněn ze začátku (levý okraj) pole. Všechny ostatní prvky pole jsou posunuty o jednu pozici na začátek pole. Funkce array_shift() má stejnou syntaxi jako array_shift():

array_shift(pole pole)

Při práci s funkcí array_shift() si musíte pamatovat, že prvky jsou odstraněny ze začátku pole, jak ukazuje následující příklad:

$languages ​​​​= array("španělština", "angličtina", "francouzština", "ruština");

$a_language = array_shift($languages); // $a_language = "španělština";

// $languages ​​​​= array("Angličtina", "Francouzština", "Ruština");

Funkce array_unshift() doplňuje array_shift() vložením nového prvku na začátek pole a posunutím zbývajících prvků o jednu pozici doprava. Syntaxe příkazu array_unshift() je:

1nt array_unshift(pole pole, smíšená proměnná1 [....proměnná2])

Jedním voláním funkce můžete přidat jeden nebo několik prvků a velikost pole se zvyšuje úměrně počtu přidaných prvků. Příklad přidání více prvků:

$ languages ​​​​= array("francouzština", "italština", "španělština");

array_unshift($languages, "ruština", "svahilština", "čínština");

// $languages ​​​​= array("ruština", "svahilština", "čínština",

// "francouzština", "italština", "španělština");

Funkce array_pad() vám umožňuje rychle zvětšit pole na požadovanou velikost tím, že jej vyplníte standardními prvky. Syntaxe funkce array_pad() je:

pole arrap_pad(pole pole, velikost int, smíšená hodnota):

Parametr velikost definuje novou délku pole. Parametr význam určuje výchozí hodnotu přiřazenou prvkům ve všech nových pozicích pole. Při použití array_pad() je třeba zvážit několik věcí:

Li velikost je pozitivní, pole je vyplněno vpravo, a pokud je záporné, pole je vyplněno vlevo.

Pokud je absolutní hodnota parametru velikost je menší nebo rovna délce pole, neprovede se žádná akce.

Absolutní hodnota (modul) celého čísla je jeho hodnota bez znaménka. Například absolutní hodnota čísel 5 a -5 je 5.

Příklad připojení pole od konce:

$weights = array_pad($weights. 10, 100);

// Výsledek: $weights = array(1, 3, 5, 10, 15, 25, 50, 100, 100, 100);

Příklad připojení pole od začátku:

$vahy = pole(1, 3, 5, 10, 15, 25, 50);

$vahy = array_pad($vahy, -10, 100);

// Výsledek: $weights = array(100, 100, 100, 1, 3, 5, 10, 15, 25, 50);

Nesprávný pokus o připojení pole:

$vahy = pole(1, 3, 5, 10, 15, 25, 50);

$weights = array_pad($weigtits, 3, 100);

// Pole $weights se nemění:

// $vahy = pole(1, 3, 5, 10, 15, 25, 50);

Iterování přes prvky

PHP má několik standardních funkcí navržených pro iteraci prvků pole. Společně tyto funkce poskytují flexibilní a pohodlné prostředky pro rychlé zpracování a zobrazení obsahu polí. Tyto funkce pravděpodobně budete často používat, protože tvoří základ téměř všech algoritmů pole.

Funkce reset() přesune interní ukazatel na aktuální pozici v poli na první prvek. Navíc vrátí hodnotu prvního prvku. Syntaxe funkce Reset():

smíšený reset (pole pole)

Zvažte následující pole:

$fruits = array("jablko", "pomeranč", "banán");

Řekněme, že aktuální ukazatel pozice v tomto poli je nastaven na prvek „oranžový“. Tým:

$a_ovoce = reset($ovoce);

vrátí ukazatel na začátek pole, tedy prvek "apple", a vrátí tuto hodnotu, pokud je v programu použit výsledek volání reset(). Je možná i zjednodušená verze výzvy:

V tomto případě se ukazatel přesune na první prvek pole a návratová hodnota se nepoužije.

Funkce every() provádí při každém volání dvě věci: vrací pár klíč/hodnota, na který odkazuje aktuální ukazatel pozice, a přesune ukazatel na další prvek. Syntaxe funkce Each():

pole každý (pole pole)

Pro usnadnění vrací every() klíč a hodnotu jako pole čtyř prvků; klíče tohoto pole jsou 0, 1, hodnota a klíč. Vrácený klíč je spojen s klíči 0 a klíčem a vrácená hodnota je spojena s klíči 1 a hodnotou.

V následujícím příkladu funkce every() vrací prvek na aktuální pozici:

// Deklaruje pole pěti prvků

$spices = array("petržel", "šalvěj", "rozmarýn", "tymián", "pepř");

// Nastaví ukazatel na první prvek pole

// Vytvořte pole $a_sp1ce. čtyřdílný

$a_koření = každé($koření);

V důsledku provedení výše uvedeného fragmentu bude pole $a_spice obsahovat následující páry klíč/hodnota:

  • 0 => 0;
  • 1 => "petržel";
  • klíč => 0;
  • hodnota => "petržel".

Poté může být řetězec "petržel" vydán kterýmkoli z následujících příkazů:

print $a_spice: print $a_spice["hodnota"];

Funkce every() se obvykle používá v kombinaci s list() v cyklických konstrukcích k iteraci přes všechny nebo některé prvky pole. Při každé iteraci vrací every() buď další pár klíč/hodnota, nebo booleovskou false, když je dosaženo posledního prvku pole. Vraťme se k poli $spices; Chcete-li zobrazit všechny prvky na obrazovce, můžete použít následující skript:

// Obnovení aktuální polohy ukazatele

// Výčet párů klíč/hodnota s omezením výstupu na hodnotu

while (seznam ($key, $val) = každý ($spices)) :

tisknout "$val
"

Níže je zajímavější příklad použití each() v kombinaci s dalšími funkcemi popsanými v této kapitole. Výpis 5.1 ukazuje, jak používat tyto funkce k zobrazení formátované tabulky zemí a jazyků.

Výpis 5.1. Vytvoření tabulky HTML z obsahu pole

// Deklarujte asociativní pole zemí a jazyků $languages ​​​​= pole ("Country" => "Language",

"Španělsko" => "španělština",

"USA" => "angličtina",

"Francie" => "francouzština",

"Rusko" => "Ruština");

// Založení nové tabulky

tisknout"

";

// Přesuňte ukazatel na pozici prvního prvku

$hdl = klíč($jazyky);

Shd2 = $jazyky[$hd1];

// Zobrazí první klíč a prvek jako záhlaví tabulky

tisknout"

";

dalsi($languages);

// Tisk řádků tabulky s klíči a prvky pole

while (seznam ($ctry,$lang) = každý ($languages)) :

tisknout"

";

// Ukončení tisku tabulky "

$ hd1$ hd2
Scry$lang
";

Spuštěním tohoto kódu vznikne následující HTML tabulka.

Země

Jazyk

Španělsko španělština
USA angličtina
Francie francouzština
Rusko ruština

Tento příklad poskytuje představu o největší síle PHP – jeho schopnosti kombinovat dynamický kód s HTML a vytvářet vizuální, formátovanou reprezentaci dat, která čte.

Funkce end() přesune ukazatel na pozici posledního prvku pole. syntaxe funkce end():

konec (pole pole)

Funkce next() posune ukazatel dopředu o jednu pozici a poté vrátí prvek na novou pozici. Pokud v důsledku posunutí

Ukazatel půjde za pole, next() vrátí false. Syntaxe funkce Next():

smíšené další (pole pole)

Nevýhodou funkce next() je, že vrací false pro existující, ale prázdné prvky pole. Pokud chcete provádět běžné vyhledávání, použijte funkci every().

Funkce prev() je podobná funkci next() s jednou výjimkou: přesune ukazatel o jednu pozici na začátek pole a poté vrátí prvek na novou pozici. Pokud posun umístí ukazatel před první prvek pole, prev() vrátí hodnotu false. Syntaxe funkce prev() je:

smíšené předchozí (pole pole)

Nevýhodou funkce prev() je, že vrací false pro existující, ale prázdné prvky pole. Pokud chcete provádět běžné vyhledávání, použijte funkci every().

Funkce array_walk() vám umožňuje aplikovat funkci na více (nebo možná všechny) prvky pole. Syntaxe funkce array_walk() je:

int pole_walk(pole pole, řetězec název_funkce [, smíšená data])

Funkci specifikovanou funkcí název_funkce lze použít k různým účelům, jako je vyhledávání prvků s určitými vlastnostmi nebo úprava obsahu pole. V asociativních polích musí funkce název_funkce obdržet alespoň dva parametry – prvek pole a klíč. Pokud je zadán volitelný třetí parametr, stane se třetím parametrem. Následující příklad používá funkci array_walk() k odstranění duplikátů z pole:

funkce delete_dupes($element) (

static $last=""; if ($element == $poslední)

unset($element); jiný. ""

$emails = array(" [e-mail chráněný]", "[e-mail chráněný]", "[e-mail chráněný]");

array_walk($emails,"delete_dupes");

// $emails = array(" [e-mail chráněný]", "[e-mail chráněný]");

Funkce array_reverse() vám umožňuje snadno obrátit pořadí prvků, které tvoří pole. Syntaxe funkce array_reverse() je:

pole array_reverse(pole pole)

Podívejme se na příklad použití funkce array_reverse():

$us_wireproducers = array("Kalifornie", "Oregon", "New York". "Washington");

$us_wine_producers - array_reverse(Sus_wine_producers);

// $us_wine_producers = array ("Washington". "New York", "Oregon". "Kalifornie");

Když zavoláte array_reverse() na asociativním poli, páry klíč/hodnota se zachovají, změní se pouze pořadí prvků pole.

Funkce array_flip() otočí klíče a hodnoty prvků pole. Syntaxe funkce array_flip() je:

pole array_flip(pole pole)

V následujícím příkladu funkce array_flip() zamění všechny klíče a hodnoty prvků:

$languages ​​​​= array("Španělsko" => "Španělština", "Francie" => "Francouzština", "Itálie" => "Italština");

$languages ​​​​= array_flip($languages);

// $languages ​​​​= array("Španělština" => "Španělsko", // "Francouzština" => "Francie", // "Italština" => "Itálie");

Pamatujte: funkce array_flip(). se nemění pořadí prvků pole. K tomuto účelu se používá funkce array_reverse().

Velikost pole

Mít informace o aktuální velikosti pole může často skript zefektivnit. Velikost pole se pravděpodobně nejčastěji používá při iteraci přes prvky:

$us_wine_producers = array("Washington". "New York", "Oregon", "Kalifornie");

pro (Si = 0; Si< sizeof ($us_wine_producers); $i++) :

tisknout "$us_wine_producers[$i]";

Protože pole $us_wine_producers je indexováno celými čísly, můžeme použít cyklus for k procházení proměnné čítače ($i) a vytisknout každý prvek v poli.

Funkce sizeof() vrací počet prvků v poli. Syntaxe funkce sizeof() je:

int sizeof (pole pole)

Funkci sizeof() pravděpodobně často uvidíte ve svých webových aplikacích. Níže je krátký příklad jeho použití (mimochodem, předchozí příklad je také standardní použití sizeof()):

$pasta = array("motýlky", "andělské vlasy", "rigatoni");

$velikost_pasta = sizeof($pasta);

// $pasta_size = 3

Funkce sizeof() má také další rozšířený tvar count() (viz níže).

Funkce count() provede stejnou operaci jako sizeof(); vrátí počet hodnot obsažených v poli. Syntaxe funkce count() je:

int count (smíšená proměnná)

Jediný rozdíl mezi sizeof() a count() je ten, že v některých situacích count() vrací další informace:

  • pokud proměnná existuje a je polem, count() vrátí počet prvků v poli;
  • pokud proměnná existuje, ale není polem, funkce vrátí 1;
  • pokud proměnná neexistuje, vrátí se hodnota 0.

array_count_values()

Funkce array_count_values() je variací sizeof() a count(). Místo celkového počtu prvků počítá počet výskytů každé hodnoty v poli. Syntaxe funkce array_count_values() je:

array_count_values(pole pole):

Ve vráceném poli budou klíče hodnoty původního pole a hodnoty budou jejich frekvence:

$states = аrrау("ON", "OK", "SA", "RA", "ON", "ON", "RA", "AK");

$state_freq = array_count_values($states);

Pole $state_freq je vyplněno následujícími asociativními páry klíč/hodnota:

$state_freq = аrrау("ON" => 3, "OK" => 1, "SA" => 1, "RA" => 2, "AK" => 1);

Třídicí pole

Třídění zaujímá důležité místo v programování a v praxi se často nachází v takových internetových aplikacích, jako jsou komerční stránky (třídění kategorií produktů v abecedním pořadí, řazení cen) nebo vyhledávače (třídění programů podle počtu stažení). V PHP je devět standardních třídicích funkcí (tabulka 5.1) a každá funkce třídí pole specifickým způsobem.

Tabulka 5.1. Třídicí funkce

Řazení

Opačné pořadí

Ukládání párů klíč/hodnota

Význam

Význam

Význam

Význam

Význam

Význam

Odkazuje na použití vlastních funkcí řazení, kde pořadí řazení pole závisí na výsledcích vrácených vlastní funkcí.

Třídění prvků pole není omezeno na standardní kritéria, protože tři funkce (usort(), uasort() a uksort()) umožňují nastavit vlastní kritéria a třídit informace libovolným způsobem.

Nejjednodušší funkce sort() seřadí prvky pole ve vzestupném pořadí (od nejmenšího po největší). Syntaxe funkce sort() je:

void sort (pole pole)

Nečíselné prvky jsou seřazeny abecedně podle kódů ASCII. Následující příklad ukazuje použití funkce sort() při řazení:

// Vytvořte pole měst.

// Seřadit města ve vzestupném pořadí

// Procházení obsahu pole a výstup všech párů klíč/hodnota.

pro (reset($cities); $key = klíč ($cities); další ($cities)):

print("města[$klíč] = $města[$klíč]
";

Tento fragment vytváří následující výstup:

města = Aprilia

města = Nettuno

města = Venezia

Jak vidíte, pole $cities je řazeno abecedně. Jedna varianta této metody třídění je implementována ve funkci asort() popsané níže.

Funkce rsort() funguje úplně stejně jako funkce sort() s jednou výjimkou: prvky pole jsou seřazeny v obráceném pořadí. Syntaxe funkce rsort():

void rsort (pole pole)

Vraťme se k poli $cities z předchozího příkladu:

$cities array("Aprilia", "Nettuno", "Romové", "Benátky", ​​"Anzio");

města = Venezia

města = Nettuno

města = Aprilia

Pole $cities je také seřazeny, ale tentokrát v obráceném abecedním pořadí. Jedna varianta této metody třídění je implementována ve funkci arsort() popsané níže.

Funkce asort() funguje v podstatě stejně jako výše zmíněná funkce sort(), avšak zachovává původní asociaci indexů s prvky bez ohledu na nové pořadí prvků. Syntaxe funkce asort():

void asort (pole pole)

Vraťme se k poli $cities:

$cities = array("Aprilia", "Nettuno", "Romové", "Benátky", ​​"Anzio");

V důsledku řazení pole $cities pomocí funkce rsort() budou prvky uspořádány v následujícím pořadí:

města = Aprilia

města = Nettuno

města = Venezia

Věnujte pozornost indexům a porovnejte je s těmi, které jsou uvedeny v popisu funkce sort(). To je právě rozdíl mezi těmito dvěma funkcemi.

Funkce arsort() je variantou funkce asort(), která zachovává původní asociaci indexu, ale třídí prvky v opačném pořadí. Syntaxe funkce arsort():

void array(pole pole)

Pomocí funkce arsort() seřadíme pole $cities:

$cities = array("Aprilia", "Nettuno", "Romové", "Benátky", ​​"Anzio");

arsort($města);

města = Venezia

města[l] = Nettuno

města = Aprilia

Věnujte pozornost indexům a porovnejte je s těmi, které jsou uvedeny v popisu funkce rsort(). To je právě rozdíl mezi těmito dvěma funkcemi.

Funkce ksort() třídí pole podle klíče, přičemž zachovává původní asociace klíč-hodnota. Syntaxe funkce ksort():

void ksort (pole pole)

Zvažte například pole mírně odlišné od původního pole

$wine_producers = array ("Amerika" ​​=> "Napa Valley",

"Itálie" => "Toskánsko",

"Austrálie" => "Ruthgerlen",

"Francie" => "Loire",

"Chile" => "Údolí Rapel");

V důsledku řazení pole pomocí funkce ksort() budou prvky uspořádány v následujícím pořadí:

"Amerika" ​​=> "Údolí Napa"

"Austrálie" => "Ruthgerlen"

"Chile" => "Údolí Rapel"

"Francie" => "Loire"

"Itálie" => "Toskánsko"

Porovnejte výsledky třídění $wine_producers s funkcí sort():

"Amerika" ​​=> "Údolí Napa"

"Austrálie" => "Toskánsko"

"Chile" => "Ruthgerlen"

"Francie" => "Loire"

"Itálie" => "Údolí Rapel"

Více než pochybný výsledek!

Funkce krsort() je téměř stejná jako funkce ksort(), ale klíče jsou seřazeny v opačném pořadí. Syntaxe funkce krsort():

void krsort (pole $array)

Podívejme se na třídění pole $wi reproducers pomocí funkce krsort():

$wine_producers = array ("Amerika" ​​=> "Napa Valley",

"Itálie" => "Toskánsko",

"Austrálie" => "Ruthgerlen",

"Francie" => "Loire".

"Chile" => "Údolí Rapel");

krsort($výrobci_vína);

V důsledku řazení budou prvky uspořádány v následujícím pořadí:

"Itálie" => "Toskánsko"

"Francie" => "Loire"

"Chile" => "Údolí Rapel"

"Austrálie" => "Ruthgerlen"

"Amerika" ​​=> "Údolí Napa"

Výše popsané funkce řazení budou pro většinu případů pravděpodobně dostačující. V některých situacích však možná budete muset definovat vlastní kritéria řazení. V PHP je tato vlastnost implementována ve třech standardních funkcích: usort(), uasort() a uksort().

Funkce usort() vám umožňuje třídit pole na základě kritéria definovaného programátorem. Za tímto účelem je usort() předán název funkce, která určuje pořadí řazení jako parametr. Syntaxe funkce usort() je:

void usort (pole pole, řetězec název_funkce)

Parametr pole obsahuje název pole, které se má třídit, a parametr název_funkce obsahuje název funkce, na základě které bude řazení provedeno. Řekněme, že máte dlouhý seznam řeckých jmen, která si musíte zapamatovat pro nadcházející zkoušku z historie. Chcete seřadit slova podle délky, takže začnete s nejdelšími a poté se naučíte krátká, když jste unavení. Chcete-li seřadit pole podle délky, můžete použít funkci usort().

Výpis 5.2. Definování kritérií řazení pro funkci usort().

$vocab = аrrау("Sokrates", "Aristofanés", "Platón", "Aeschylus", "Thesmophoriazusae");

funkce Compare_length($str1, $str2) (

// Získání délky následujících dvou slov

$délka1 = strlen($str1);

$délka2 = strlen($str2);

// Určete, který řetězec má kratší délku

if ($délka1 == $délka2) :

elseif (délka $1< $length2) :

// Volání usort() specifikující funkci Compare_length().

// jako kritérium řazení

usort($vocab, "compare_length") :

// Výstup seřazeného seznamu

while (seznam ($klíč, $val) = každý ($vocab)) (

echo "$val
";

Ve výpisu 5.2 definuje funkce Compare_length() způsob řazení pole. V tomto případě se to provádí porovnáním délky přenášených prvků. Funkce kritéria musí obdržet dva parametry představující

prvky pole k porovnání. Všimněte si také, jak jsou tyto prvky implicitně předány funkci kritéria při volání usort() a jak jsou všechny prvky touto funkcí automaticky porovnávány.

Funkce uasort() a uksort() jsou varianty usort() se stejnou syntaxí. Funkce uasort() třídí pole podle uživatelsky definovaných kritérií a zachovává přidružení klíč/hodnota. Funkce uksort() také třídí pole podle vlastních kritérií, ale třídí klíče, nikoli hodnoty.

Další užitečné funkce

Tato část popisuje některé funkce, které nepatří do žádné konkrétní části, ale jsou nepochybně užitečné.

Funkce arrayjnerge() sloučí 1 až N polí a kombinuje je podle pořadí, v jakém jsou uvedeny v parametrech. Syntaxe funkce array_merge() je:

pole pole_merge(pole pole1, pole pole2, ..., pole poleN]

Podívejme se na příklad jednoduché kombinace polí pomocí funkce arrayjnerge();

$arr_1 = array("jahoda", "hroznová", "citron");

$arr_2 = array("banán", "kakao", "limetka");

$arr_3 = array("broskev", "oranžová");

$arr_4 = array_merge ($arr2, $arr_1, $arr_3):

// $arr_4 = array("banán", "kakao", "limetka", "jahoda", "hroznový", "citron", "broskev", "pomeranč");

Funkce array_slice() vrací výseč pole, jehož počáteční a koncová pozice jsou určeny posunem od začátku a volitelným parametrem délky. Syntaxe funkce array_slice() je:

pole pole_slice(pole pole, posun int [, délka int])

  • Pokud je offset kladný, počáteční pozice vráceného fragmentu se počítá od začátku pole.
  • Pokud je offset záporný, počáteční pozice vráceného fragmentu se počítá od konce pole.
  • Pokud není zadána délka, vrácené pole zahrnuje všechny prvky od počáteční pozice do konce pole.
  • Pokud je zadána kladná délka, vrácený fragment se skládá ze zadaného počtu prvků.
  • Pokud je zadána záporná délka, vrácený fragment končí v rámci zadaného počtu prvků od konce pole.

Funkce array_spl ice() je vágně podobná funkci array_slice() -- nahrazuje část pole definovanou počáteční pozicí a volitelnou délkou prvky volitelného parametru pole. Syntaxe funkce array_splice() je:

pole_splice(vstupni_pole pole, int offset, , );

Hodnoty parametrů jsou nastaveny podle určitých pravidel:

  • Pokud je offset kladný, počáteční pozice prvního prvku, který má být odstraněn, se počítá od začátku pole.
  • Pokud je posun záporný, počáteční pozice prvního prvku, který má být odstraněn, se počítá od konce pole.
  • Pokud není zadána délka, odstraní se všechny prvky od počáteční pozice po konec pole.
  • Pokud je zadána kladná délka, fragment, který má být odstraněn, sestává ze zadaného počtu prvků.
  • Pokud je zadána záporná délka, prvky z pole se odstraní z počáteční pozice do pozice, která je zadaná vzdálenost od konce pole.
  • Pokud není zadáno náhradní_pole, pak jsou z pole odstraněny prvky určené offsetem a volitelnou délkou.
  • Pokud je zadáno náhradní_pole, musí být uzavřeno v konstrukci array() (pokud obsahuje více než jeden prvek).

Podívejme se na pár příkladů, které jasně demonstrují schopnosti této funkce. Tyto příklady budou používat pole $pasta (viz výše), na kterém se budou provádět různé operace.

Odstranění všech prvků z páté pozice na konec pole:

$pasta = array_splice($pasta, 5);

Odstranění pátého a šestého prvku:

$pasta = array_splice($pasta. 5, 2);

Nahrazení pátého a šestého prvku novými hodnotami:

$pasta = array_splice($pasta, 5, 2, array("prvek1", "prvek2"));

Odstranění všech prvků počínaje pátým až třetím prvkem z konce pole:

$pasta = array_splice($pasta, 5, -3);

Jak můžete vidět z těchto příkladů, funkce array_splice() poskytuje flexibilitu při odstraňování prvků z pole s minimálním množstvím kódu.

Funkce shuffle() třídí prvky pole v náhodném pořadí. Syntaxe funkce shuffle() je:

void shuffle (pole pole);

Výsledky

Tato kapitola se zabývala poli a standardními funkcemi PHP pro práci s poli. Zvažována byla zejména tato témata:

  • vytváření indexovaných a asociativních polí;
  • vícerozměrná pole;
  • zobrazování obsahu vícerozměrných polí;
  • vyhledávání prvků;
  • přidávání a odebírání prvků;
  • velikost pole;
  • třídění;
  • další užitečné funkce pro práci s poli.

Pole jsou velmi pohodlné a univerzální nástroje pro práci s daty ve webových aplikacích. V příkladech v dalších kapitolách budou pole opakovaně použita ke zlepšení efektivity a přehlednosti kódu.

V kapitole 6 budeme pokračovat v představování základů PHP. Tentokrát si povíme něco o objektově orientovaných možnostech jazyka.

Dnes se podíváme na pole. Povíme si o jejich syntaxi, různých typech a vestavěných funkcích pro práci s poli. Uvedeme také praktické příklady použití polí v PHP.

Nejprve vám ale povím zajímavý příběh.

V blízkosti mé kanceláře je obchod s DVD s vynikajícím výběrem anglických filmů. Majitel obchodu není příliš vzdělaný člověk, ale i tak snadno najde požadovaný film mezi 20 tisíci disky. Jak to dělá?

Analyzoval jsem jeho strategii. Majitel obchodu rozdělil všechna DVD do různých žánrů a také poskytl speciální identifikátory/kódy pro různé regály. Podobné filmy drží ve stejných regálech. Každá police je označena názvem kategorie, jako jsou Romantické filmy, Hororové filmy atd. Každé DVD má jedinečné ID, které lze použít pro sledování.

Pokud si tedy někdy otevřete svůj vlastní obchod s DVD, udělejte následující:

  • Podobné disky DVD skladujte na stejné poličce.
  • Označte každou kategorii jejím názvem.
  • Označte řádky DVD.
  • Přiřaďte ID všem DVD.

Nyní k morálce příběhu, který nás zavede zpět do světa počítačů.
Někdy je potřeba při programování zacházet se souvisejícími hodnotami, které spolu souvisí různými způsoby. Například jména pěti nejlepších studentů, modely vozů Porsche, proměnné zastoupené v určité formě atd. V takových případech je nutné uspořádat kód a logiku, aby je bylo možné efektivně a rychle spravovat. K tomu můžete použít logiku prodejce DVD:

1. Uspořádejte svá data do různých kategorií.
2. Definujte řádky (řádky).
3. Přiřaďte každé datové hodnotě jedinečné identifikátory.

Jednoduchá definice polí: blok, který pomáhá kombinovat podobná data stejného typu pro lepší organizaci a zpracování.

Správná definice pole

"Sbírka různých proměnných s jedním štítkem, který umožňuje organizovat hodnoty pro snazší zpracování."

Toto je moje vlastní definice polí. Ačkoli je někteří definují jako „proměnnou, která obsahuje další proměnné“.

Syntaxe pole:

$poleName = pole (”value1?”,”value2?”,”value3?);

K zadání názvu pole používáme symbol $. Následuje rovnítko a poté klíčové slovo „array“. Sděluje analyzátoru, že pracujeme s polem.

Poté následují hodnoty v závorkách a každá z nich je uzavřena do dvojitých uvozovek a oddělena čárkou.

Příklad definování a zobrazení polí v PHP:

Výstup výše uvedeného programu bude následující:

Array ( => fastcreators.com => howtoforge.com => scriptsbible.com)

Používáme print_r, protože nemůžete vytisknout pole pomocí echo nebo print. I když je můžete použít k zobrazení jednotlivých prvků z pole. Například:

echo $Top3Sites; //fastcreators.com

Pamatujte, že indexové číslo začíná 0, nikoli 1.

Každé hodnotě pole je přidělen jedinečný identifikátor, který je známý jako INDEXOVÉ ČÍSLO.
Dalším způsobem by bylo definovat tři proměnné, přiřadit jim hodnoty a použít různé operátory k jejich zobrazení. To může být přijatelné v případě tří hodnot akceptovaných argumentem. Ale nehodí se, když máme co do činění s padesáti nebo stovkami hodnot.

Ve výše uvedeném příkladu jsme definovali pole a přiřadili mu hodnoty v jednom kroku. I když to můžete udělat takto:

Typy polí

V PHP existují tři typy polí:

  • Numerický: Pole s číselným ID klíčem.
  • Asociativní: Pole, ve kterém je každý klíč identifikátoru spojen s hodnotou.
  • Multidimenzionální: Pole skládající se z jednoho nebo více polí.

Číselná pole používají k identifikaci každého prvku celé číslo jako indexové číslo. Příklady, na které jsme se podívali výše, jsou číselná pole Jako index používají celočíselné hodnoty.

bílá => černá => modrá) */ ?>

Ve výše uvedeném kódu indexy pro bílou, černou a modrou odpovídají 0,1,2, proto taková pole nazýváme numerická.

Asociativní pole

Někdy je lepší použít místo čísel indexové názvy. Například pokud chcete uložit jména a čísla tří studentů.

Když odešlete data formuláře pomocí metody POST nebo GET, obdržíte asociativní pole. Zkuste vytvořit formulář HTML s poli a publikovat jej a na stránce zpracování zobrazit globální pole, například:

print_r($_POST); print_r($_GET);

a získáte asociativní pole.

Asociativní pole usnadňují manipulaci s informacemi souvisejícími s reprezentacemi složitých formulářových dat, dynamickými databázovými hodnotami a tak dále.

Vícerozměrná pole

Vícerozměrné pole může obsahovat pole sama v sobě a podpole mohou obsahovat další pole.

Použijme příklad ze života. David má dva syny, Richieho a Masona. Richie má dvě dcery - Sue a Natashu, zatímco Mason má tři dcery - Nicole, Salmu a Amber. Jejich rodokmen vypadá takto:


Pokud chceme zobrazit Davidův rodokmen pomocí vícerozměrného pole PHP, můžeme pole definovat takto:

$david = pole („richie“=>pole („Sue“, „Natasha“), „Mason“=>pole („Nichole“, „Salma“, „Amber“));

K uspořádání dat můžete použít vícerozměrná pole. Zkuste odeslat pole formulářových polí a poté výstup globálního pole otestovat výstup a skončíte s globálním vícerozměrným polem, které bude zahrnovat další pole.

Smyčka FOREACH

Smyčka FOREACH se používá k převzetí každé následující hodnoty pole a provedení požadovaných akcí na ní.

Základní syntaxe smyčky FOREACH je následující:

foreach($arraynameas $temporaryVarName) ( // tělo cyklu foreach //$temporaryVarName obsahuje hodnoty pole a //při každé další iteraci přebírá další dostupnou hodnotu z pole)

Pojďme napsat program pomocí smyčky FOREACH:

$std_name funguje jako proměnná, která přebírá hodnotu pole. Při každém spuštění smyčky další hodnota pole přepíše stávající hodnotu $std_name a $std_name ukazuje na aktuálně vybranou hodnotu. Takto iterujeme hodnoty pole jednu po druhé.

Výsledkem výše uvedeného kódu je:

david kevin julie nayyar

Smyčka FOREACH končí, když dosáhne poslední hodnoty v poli. V našem případě se jedná o hodnotu NAYYAR.

Smyčku můžete kdykoli přerušit pomocí příkazu break. Například při zpracování jména julie můžete do výše uvedeného kódu zahrnout příkaz IF, jak je uvedeno níže:

Existují další pohodlné funkce pro práci s poli.

Důležité funkce pole

1) Uložení výstupu funkce print_r:

Dříve jsme používali print_r k zobrazení hodnot pole. Ale můžete přidat další argument do print_r a uložit výsledek do proměnné. Například:

Print_r zobrazí pole samotné, pokud nepoužijete jako druhý argument hodnotu TRUE. Ale pokud je zadáno TRUE, funkce uloží výstup do proměnné.

2) Jak určit velikost pole?

Pokud chcete určit počet hodnot v poli, můžete použít funkci COUNT takto:

Výše uvedený kód vypíše 3, protože pole obsahuje tři prvky.

3) funkce var_dump:

Jedná se o funkci podobnou print_r() . V zásadě to dělá to samé, ale:

  • zobrazuje velikosti proměnných;
  • nezobrazuje v objektech neveřejná data;
  • nepodporuje druhý parametr pro návrat výstupu.

Úprava prvního skriptu pomocí var_dump() dává následující výsledek:

array(3) ( => string(6) “Jablka” => string(7) “Pomeranče” => string(5) “Hrušky” )

Funkce var_dump() ukázala, že pole má tři hodnoty, a také vytiskla délku každého řádku.

4) funkce var_export:

Existuje funkce var_export(), která je podobná funkcím var_dump() a print_r() . Liší se tím, že ve výsledku zobrazuje informace o proměnné, kterou lze použít jako PHP kód. Pokud bychom například místo print_r() použili var_export(), dostali bychom následující:

pole (0 => ‚Jablka‘, 1 => ‚Pomeranče‘, 2 => ‚Hrušky‘,)

Všimněte si, že za posledním prvkem je přidána čárka navíc. PHP to však ignoruje a tyto informace můžete zkopírovat a vložit přímo do svých skriptů:

"Jablka", 1 => "Pomeranče", 2 => "Hrušky"); ?>

5) funkce array_shift:

Odebere první prvek z pole a uloží jej do proměnné.

Můžete například odebrat jablka z pole použitého v předchozích příkladech a uložit tuto hodnotu do jiné proměnné:

Toto je užitečná funkce, pokud máte vícerozměrné pole předané z formuláře a chcete získat podmatici z hlavního pole. Ale když vyberete dílčí matici z hlavního pole pomocí array_shift , přijímající proměnné ($ovoce v předchozím příkladu) bude pole.

Doporučuji také prozkoumat další užitečné funkce související s array_shift :

array_unshift

pole_pop

array_push

Také chci upozornit, že smyčka FOREACH není jediný způsob, jak zpracovávat pole. To lze provést pomocí cyklu FOR nebo funkcí list() a every().

Chcete-li zpracovat pole, musíte určit velikost pole, jak je uvedeno níže:

To funguje skvěle pro numerická pole, která mají celočíselné indexy, ale nefunguje to pro asociativní pole.




Nahoru