Работа с масиви
Какво е масив? Масивът е подредена асоциация (асоциират се стойности към ключове). Масивът като тип променлива може да се използва като реален масив, като вектор (списък), хеш-таблица, речник, колекция, ред, опашка и т.н. Като стойност, масивът може да приема и друг масив и по този начин могат да се симулират дървета.
Масивът се създава по следния начин:
<?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 кодиране и декодиране на масив |
|
|
Няма коментари:
Публикуване на коментар