Работа с масиви
Какво е масив? Масивът е подредена асоциация (асоциират се стойности към ключове). Масивът като тип променлива може да се използва като реален масив, като вектор (списък), хеш-таблица, речник, колекция, ред, опашка и т.н. Като стойност, масивът може да приема и друг масив и по този начин могат да се симулират дървета.
Масивът се създава по следния начин:
<?php $array = array(); ?>където
array( ключ1 => стойност1, ключ2 => стойност2, ключ3 => стойност3, ... )
Запетаята в последния ред не е задължителна и може да се изпусне. Ключът може да е цяло число или низ, а стойността може да е всеки вид променлива. Операторът „=>” се прилага за назначаване на стойност към ключа.
Да вземем за пример създаването на списък с химични елементи. Тогава масивът, който ще съдържа наименованията на тези химични елементи, може да се запише така:
<?php $elements = array( "Водород", "Кислород", "Хелий", "Натрий", "Радон", "Радий" ); ?>
Ако изрично не са посочени ключовете на отделните елементи на масива, номерирането им започва от 0. Ако искаме да изведем стойността, например на петия елемент от масива, пишем:
<?php $elements = array( "Водород", "Кислород", "Хелий", "Натрий", "Радон", "Радий" ); var_dump ($elements); //Извежда елементите на масива echo "<br/><br/>"; //Извежда елемент с ключ 4 от масива (петият елемент в масива) echo "Петият елемент в списъка е" . " " . $elements [4] . "."; ?>
Функцията, даваща информация за типа на променливата $elements, нейното наименование и ключ, е var_dump (). При изпълнение на скрипта, записан по-горе, в прозореца на браузъра ще видите:
Резултатът, показан на изображението може да се разпише така:
array(6) { [0]=> string(14) "Водород" [1]=> string(16) "Кислород" [2]=> string(10) "Хелий" [3]=> string(12) "Натрий" [4]=> string(10) "Радон" [5]=> string(10) "Радий" }
Информацията, която получаваме: масивът е съставен от 6 елемента, всички са стрингове, виждат се и двойките ключ => стойност.
Ако искаме да изготвим списък с имена на хора и тяхната професия, тогава:
<?php $name_and_profession= array ( "Edelw" => "teacher ", "Maya" => "doctor", "Ivan" => "engineer" ); echo "Edelw is a" . " " . $name_and_profession ["Edelw"] . "." . "<br/>"; echo "Maya is a" . " " . $name_and_profession ["Maya"] . ".". "<br/>"; echo "Ivan is an" . " " . $name_and_profession ["Ivan"] . ".". "<br/>"; ?>
Примерите, които дадох по-горе, са примери за едномерни масиви. В практиката често се налага създаване на многомерни масиви. Многомерните масиви са съставени от два или повече мономерни масива.
Да се върнем отново на примера с химичните елементи. От часовете по химия ни е известно, че химичните елементи се делят на елементи с метален химичен характер, елементи с неметален химичен характер и елементи с двойствен химичен характер. Да съставим масив $elements, който ще съдържа в себе си три масива: $elements (Метали); $elements (Неметали) и $elements (Двойнствен характер).
$elements = array(); $elements ["Метали"] = array("Натрий", "Литий"); $elements ["Неметали"] = array("Хлор", "Бром"); $elements ["Двойнствен характер"] = array("Алуминий", "Цинк");
За да изведем на екрана всеки масив от $elements с неговите членове, пишем следния скрипт:
<?php $elements = array(); $elements["Метали"] = array("Натрий", "Литий"); $elements["Неметали"] = array("Хлор", "Бром"); $elements["Двойствен характер"] = array("Алуминий", "Цинк"); foreach($elements as $categoryName => $value) { echo "<b>" . $categoryName . ":</b><br />"; foreach($elements[$categoryName] as $name) { echo $name . "<br />"; } echo "<br />"; } ?>
В браузъра ще видим:
Първо създаваме празен масив, наречен $elements. В него искаме да съхраним имена на химични елементи с различни химични свойства. Първият масив ще съдържа различните групи елементи според свойствата (метали, неметали и двойствен химичен характер), всяка от която ще сочи към конкретни представители химични елементи, принадлежащи на тази група.
Функцията foreach() служи за обхождане на масиви. При първия цикъл обхожда зададения чрез $categoryName масив. При всяка итерация стойността на текущия елемент се присвоява на променливата $value и вътрешния указател на масива се придвижва с единица и при следващата итерация се разглежда следващия елемент. Вторият цикъл прави същото нещо, но ключът на текущия елемент ще бъде присвоен на променливата $name при всяка итерация.
Други полезни функции при работа с масиви са функциите implode() и explode(). С implode() можем да изведем елементите на масива в низ. Например:
<?php $alkali= array("Литий", "Натрий", "Калий", "Рубидий", "Цезий"); $comma_separated = implode(",", $alkali); echo "Алкални елементи са:" ." ". $comma_separated . "."; ?>
В синтаксиса си функцията explode() съдържа три параметъра:
array explode ( string $delimiter , string $string [, int $limit = -1 ] )
Ако не е зададена стойност на параметъра $limit, функцията връща масив, съдържащ всички елементи на низа. Например:
<?php $array= "Литий, Натрий, Калий, Рубидий, Цезий"; $alkali = explode (",", $array); print_r ($alkali); ?>
Как можем да проверим дали една стойност съществува в масива или не? Това можем да направим с помощта на функцията in_array(). Например:
<?php $alkali = array("Литий", "Натрий", "Калий", "Рубидий", "Цезий"); if(in_array("Калий", $alkali)) echo "Елементът Калий е включен в масива."; else echo " Елементът Калий не е включен в масива."; ?>
Синтаксисът на функцията in_array() e:
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
Функцията in_array() може да приема три параметъра, като третият е незадължителен (той определя дали сравнението ще е стриктно, което означава дали стойността и нейният тип съвпадат). Подразбиращата се стойност на третия параметър е FALSE.
Ако е необходимо да се провери дали в даден масив съществува определен ключ, се прилага функцията array_key_exists().
Понякога получавате масив от външен източник- база данни или файл, например. В тези случаи може да възникне дублиране на стойностите. За да се премахнат подобни дублирания, можем да прилагаме функцията array_unique(). Тази функция ще върне масив, в който всички стойности са уникални. Например:
<?php $alkali = array("Литий", "Натрий", "Калий", "Рубидий", "Цезий", "Натрий"); echo "Елементите в масива са:<br />"; foreach($alkali as $value) echo $value . "<br />"; echo "<br />"; $array = array_unique($alkali); echo "Елементите в масива с уникални стойности са:<br />"; foreach($alkali as $value) echo $value . "<br />"; ?>
Когато се нуждаем да изведем произволно един или няколко члена от масива, прилагаме функцията array_rand().
<?php $day = array( "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"); $rand_keys = array_rand($day, 2); echo "Произволно избраните дни от седмицата са:" ." ". $day[$rand_keys[0]] ." "."и" . "\n"; echo $day[$rand_keys[1]] . "\n"; ?>
Как се осъществява сортирането на масиви? Това се постига с помощта на функцията sort():
<?php $day = array( "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"); echo "Неподреден списък с дните от седмицата: " . " ". implode(", ", $day); echo "<br /><br />"; sort($day); echo "Дните от седмицата в азбучен ред: " . " " . implode(", ", $day); echo "<br /><br />"; $day = array_reverse($day); echo "Дните от седмицата, подредени в обратен на азбучния ред: " . " " . implode(", ", $day); ?>
Може примерът за сортиране на дните от седмицата да ви се стори глупав и неприложим в практиката. :) Аз не мисля така, и считам, че не се налага да обяснявам защо. :)
Стандарт JSON и масиви
<?php //json_app.php //Задава кодирането на страницата header('Content-Type: text/html; charset=UTF-8'); //Създава масив от 6 елемента $elements = array( "Водород", "Кислород", "Хелий", "Натрий", "Радон", "Радий" ); //Извежда елементите на масива var_dump ($elements); echo "<br/><br/>"; foreach($elements as $num => $value) echo '<br/>'. $num.' : '. $value; echo "<br/><br/>"; //Извежда елемент с ключ 4 от масива (петият елемент в масива) echo "Петият елемент в списъка е" . " " . $elements [4] . "." . "<br><br>"; //Кодира масива в JSON стринг $json_1= json_encode($elements); //Извежда на екрана JSON стринга, който ще се декодира echo "JSON стринга има следния вид:" . "<br>" . $json_1 . "<br><br>"; //Декодира JSON стринга $json_2 =json_decode($json_1,true); //Извежда съдържанието на масива foreach($json_2 as $num => $value) echo '<br/>'. $num.' : '. $value; ?>
![]() |
---|
![]() |
JSON кодиране и декодиране на масив |
|
Няма коментари:
Публикуване на коментар