Обучение в PHP - част 5 (Работа с масиви)
Работа с масиви]

Вече знаете, че променливата е контейнер за една стойност. Масивът от друга страна е контейнер за множество стойности. Той също така може да съдържа множество елементи от различни типове. Елементите от масива се адресират или маниполират на базата на тяхния индекс. Индексът на елемент от масив обикновено е цяло число.
Има няколко типа масиви в PHP. Да разгледаме в подробности следните типове масиви.
Типове масиви

Масивите могат да се класифицират на базата на индексите си и на елементите си. Различните типове масиви са

Номериран масив
Асоциативен масив
Многомерен масив


Номерирани масиви

Масивите, които имат целочислени индекси, са извесни под името номерирани или числово индексирани масиви. Тези масиви се използват за съхраняване на стойности. Например, можете да имате масив с име Students, в който всеки елемент да съхранява името на студент.

В този масив, всеки елемент, може да бъде адресиран по индекса си. Например, Името James може да бъде адресирано от индекс 0. За да визуализирате елемента с индекс 2, можете да използвате следния ред:

echo "$Students [2]";


Асоциативни масиви

Ако ви се налага да осъществявате достъп до елементите на даден масив по име, тогава трябва да използвате низове като индекс на масива. Масивите, които използват низове като индекси, се наричат асоциативни масиви.
Ще откриете една съществена разлика при работата с немерираните и асоциативните масиви. При асоциативните масиви масиви не можете да изчислите следващия валиден индекс в масива. Можете да създадете асициативен масив с име Student_Name, като присвоите стойността на индекса.

$Student_Name["name1"] = "James Patt"; $Student_Name["name2"] = "John Smith"; $Student_Name["name3"] = "Susan Carter";

Можете също така да консвертирате съществуващ номериран масив в асоциативен масив. За да конвентирате съществуващ масив Student в асоциативен масив, направете следното:

$Student = array ("name1" =>"James Patt", "name2" =>"John Smith", "name3" => "Susan Carter");

След като сте конвентирали номериран масив в асоциативен, можете да използвате командата echo, за да визуализирате елементите от масива.

echo "$Student["name3"]";

На екрана ще се появи името Susan Carter. Можете също така да използвате функциите list() и each(), за да осъществите достъп до елементите в асоциативен масив. Функцията list() се използва за присвояване стойностите на елементите от масива на променливи. А финкцията each() получава масив като аргумент и връща индекса и стойността на всеки елемент от масива.

Например:

$Student = array ("name1" =>"James Patt", "name2" =>"John Smith", "name3" => "Susan Carter"); list($key_name, $val) = each($Student); echo("$key_name"); echo ("$val");

Горния код за всеки елемент от масива присвоява на променливата $key_name индекса на елемента, а на променливата $value - стойността на елемента. След това се визуализират стойностите на променливите $key_name и $val. Така индексите ще са name1, name2, name3. A съответните стойности ще са James Patt, John Smith и Susan Carter.

Многомерни масиви

можете да съхранявате различни променливи, както и цели масиви, в друг масив. Масив, който съхранява масиви като свои елементи се нарича многомерен масив. Ако елементите на масив са двумерни масиви, тогава той е тримерен масив и т.н. Въпреки, че тези масиви могат да са тримерни, четиримерни и т.н., двумерните масиви са най-популярни. По-долу е даден пример за многомерен масив.

Rool No 1 2 3
Name James Patt John Smith Susan Carter

горният масив е пример за двумерен масив. Тук масивът Students съдържа друг масив с име Roll NO.
Тъй като масивът Students има масиви като свои елементи, Можете да осъществите достъп до втория поделеметн на първия елемент на масива , като използвате два индекса, например:

$Students [0][1]

Можете да помислите за едно изображение като пример за масив. Например трябва да виждаде координатите, докато движите показалеца на мишката върху изображението. В този случай трябва да използвате многомерен масив за координатите на x и y, както е показано подолу.

Coordinates [x][y]

Няма ограничение за броя на измеренията на масивите. Освен това можете да имзте различни типове измерения. Например, може първият индекс да е целочислен, вторият низов, третият- пак целочислен и т.н. Многомерните масиви са много полезни при представянето на сложни статически данни.


<html>
<body>
<?php
$Student = array (
"0" => array ("name" => "James", "sex" =>"Male", "age"=>"28"),
"1" => array ("name" => "John", "sex" =>"Male", "age"=>"25"),
"2" => array ("name" => "Susan", "sex" =>"Female", "age"=>"24")
);
Print $Student [2][age];
?>
</html>
</body>



Резултатът от горната програма е 24.

Работа с масиви

Инициализиране на масиви

Масивите могат да се инициализират по два начина. Можете да инизиализирате масив, като използвате:

Идентификатора на масива
Функцията array()


Използване на идентификатора на масив

Идентификатора на масив е празно множество от квадратни скоби. Можете да използвате идентификатора на масив, за да инициализирате масива Student по следния начин:

$Student[] = "James"
$Student[] = "John"


Тук присвоихте стойностите James и John на масива Student. Обърнете внимание, че не сте задали индекси. Поради тази причина на индексите 0 и 1 са присвоени съответно стойностите James и John.

Можете също така да зададете индексите явно. Например:

$Student[0] = "James"
$Student[1] = "John"$Student[0]


Обикновено се присвояват стойности на последователни стойности в масива. Но можете да присвоите стойности на произволни индекси в масива. Например:

$Student[10] = "James"
$Student[3] = "John"


В горния пример са присвоени стойности на непоследователни индекси в масива. Ако трябва да зададете индекс на нова стойност, новия индекс, ще е с единица по-голям от последния индекс. Например, ако трябва да зададете индекс на нов елемент със стойност Sarah, то новият индекс ще е 11, тъй като последния индекс е 10

Използване на функцията array()

Един по-прост начин за инициализиране на масив е използването на функцията array(). Това е просто, защото чрез използването на функцията array() задавате едновременно множество стойности. Можете да използвате функцията array(), за да дефинирате масива Student по следния начин:

$Student = array("James", "John", "Susan");


Сега, ако използвате командата Print "Student [1]", на екрана ще се появи James. Можете да използвате оператора => по следния начин:

$Student = array("James", 5 => "John", "Susan");


В горния пример на стойността James се присвоява индекс 0, на John индекс 5, a на Susan индекс 6

Работа с масиви

Използвайки вградените функции, можете да извършвате следните операции:

Да променяте размера на масви.
Да обхождате масив.
Да откривате елементи на масив.
Да обърнете реда на масив.
Да сортирате масив.


Промяна на размера на амсив

Можете да променяте размера на масив, като използвате различни функции, предоставени от PHP.
Чрез тях можете"

Дa определите размера и броя на елементите в масив. Можете да осъществите достъп до елемент, като използвате индекса му. Обаче за да изчислите броя на елементите в масив, трябва да използвате функцията count(). Можете също така да изчислите броя на елементите в масив. За да разберете по-добре действието на финкцията count(), ще разгледаме следния пример.

$Student array ( "Susan", "Betty", "Wiki");
$Number - count ($Student);
Print $Number;


Горния код инициализира масив Student с три елемента. Функцията count() връща броя на елементите в масива. Той се съхранява в променливата $Number. Когато визуализирате стойността на променливата ще видите, че тя е 3. За да намерите стойността на индекса н апоследния елемент, трябва да извадите единица от стойността на променливата $Number.
ДА промените размера на масив. Можете да намалявате, или увеличавате размера (дължината) на масив, като използвате различните функции в PHP. Промяната на размера на масив включва:
Намалчване на размера на масив. За да намалите размера на масив, трябва да използвате функцията array_slice(). Функцията array_slice, получава като параметър масив, начална позиция и дължина. Например, ако имате масив от седем елемента и искате да намалите броя му до 4 елемента, използвате функцията array_slice()

$Student array ("a", "b", "c", "d", "e", "f", "g", "h");
array_slice($Student, 4);


Функцията array_slice намалява броя на елементите от 7 на 4.

Видяхте, как можете да намалявате дължината на масив. При това намаляване обаче, се премахват последните елементи от масива. Ако искате да премахнете първите елементи от масива, трябва да използвате функцията array_shift().
Функцията array_shift() премахва първият елемент от масив. Елементите се предават на масива като аргумент. Например, нека да инициализираме масив по следния начин:

$Student array ( "Susan", "Betty", "Wiki");


Сега можете да използвате функцията array_shift() и да премахнете резултата в променливата $New

$New = arraay array_shift($Student);


Първият елемент от масива $Student, авоматично ще бъде пренахнат от функцията array_shift().
Увеличаване дължината на масив. Да предположим, че е неубходимо да се добавя още елементи в горния масив $Sudent. Можете да направите това, като използвате функцията array_push(). Функцията array_push() приема като параметър масив и връща като резултат общия брой на елементите в масива. Да разгледаме следния пример:

$Student array ( "Susan", "Betty", "Wiki"); $Insert = array_push ($Student, a, b, c);


Тук сме взели масива Student и сме добавлили към него елементите a, b, и c. След това съхраняваме елементите в нов масив с име Insert, който съдържа шест стойности.
Сега да предположим, че искате да добавите всички стойности ит един масив в друг. В този случай, можете да съберете самите масиви, вместо да работите елемет по елемент, защото е по-бързо и по-лесно. Не можете да събирате масиви, като използвате функцията array_push. В PHP има функция с име array_marge(), която ви позволява да слеете два масива.
Функцията array_marge() слива два или повече масива и връща като резултат комбинирания масив.

Например:

$Student array ( "Susan", "Betty", "Wiki");
$Class = array ("4", "5", "6");
$Combine = $Student + $Class;


Масива Combine, съдържа копия от всички елементи от масивите Student и Class. Тка масива Combine ще съдържа следните стойности:

Сега да предположим, че масивите Студент и Class иамт няколко общи елемента. Например:
$Student array ( "Susan", "Betty", "5"); $Class = array ("4", "5", "6");


Когато слеете масивите, общият елемент, ще присъства само веднъж в резултатния масив. Обаче, ако не искате да загубите общия елемент в двата масива, можете да използвате функцията array_marge_recursivw(). Можете да използвате тази функция, и ако не искате да загубите индекси по време на сливането на масивите. Функцията array_marge_recursivw() копира всички елементи, които са в масивите.
Намиране на сечението или обединението на масиви. Понякога може да ви се наложи да намерите сечението на два масива. В тези случаи трябва да използвате функцията array_intersect(). Да разгледаме например следния програмен фрагмент:

$old = array ("a", "b", "c"); $new = array ("c", "d", "e"); $Intersection = array_marge_recursivw($old, $new);


В горния код първо се инициализира масив old и new. След това се намира сечението на двата масива и резултатът се съхранява в друг масив.
Ако искате да намерите всички елементи и в двата масива, използвайте функцията union. Функцията union има следния синтаксис:

Union = (масив);


Намиране на уникалните елементи на масив. За да намерите уникалните (неповтарящи се ) елементи на амсив, трябва да използвате функцията array_unique(). Това е вградена функция в PHP. Функцията array_unique() приема масива като елемент, премахва дублиращите се елементи в него и като резултат връща нов масив. Можете да използвате тази функция, както върху номерирани масиви, така и върху асоциативни масиви. Функцията array_unique() има следния синтаксис:

$unique = array_unique($old);

Обхождане на масив

ЗА да извършите операции последователно върху елементите на масива, трябва да можете да го обхождате последователно. Има различни начини за обхождане на всеки елемент на масив. Но най-удобният е използването на цикъла foreach. Ще се разгледаме един пример.
Да предположим, че имаме номериран масив на име Student, който съдържа стойностите "John", "James" и "Susan". Можете да използвате цикъла foreach за да осъществите последователно достъп до всеки елемент в масива, като текущият елемент, се съхранява във времена променлива с име new. Ето как може да стане това:

$Student = array("James", "John", "Susan");
foreach ($Student as $new)
{
print "$new";
}

Горният код ще визуализира всички елементи на масива. Току-що използвахме цикъла foreach за обхождане на номериран масив. За да обходите асоциативен масив и за да осъществите достъп до индексите и стойностите в него, трябва да използвате следната модификация на цикъла foreach:

foreach ($Student as key_name => $new) { // }

Тук променливата key_name съхранява текущия индекс, а променливата new, текущата стойност.

Вече видяхте как можете да обхождате масив с помоща на цикъла foreach. Видяхте и как можете да използвате функциите count() и current(). Има още две функции, с помоща на които, можете да обхождате масив а именно next() и prev().
Функцията next() получава като аргумент масив. тази функция обхожда масив от лява на дясно. функцията next() връща стойността на следващия елемент. Когато достигне до края на масива, тя връща стойност False. Функцията prev() също получава като аргумент масив, но обхожда масива от края към началото му.

Търсене на елемент в масив

PHP предоставя няколко функции за търсене на елемент в масив. В PHP можете да:

Намирате елементи, които отговарят на критерий. ДА предположим, че искате да намерите всияки елементи от масив, които отговарят на даден критерии. Можете да намерите тези елементи по два начина - или като използвате цикъла foreach(), за да обходите целия масив и да проверите всяка от стойностите, или като използвате функцията preg_grep() за да постигнете същата цел. Функцията preg_grep() претърсва масив за елемети, отговарящи на зададен критерии, и връща откритите елемети като масив.
Да предположим, че искате да претърсите масива Student за да намерите всички студенти имащи Smith в имената си. В този случай можете да използвате функцията preg_grep() по следния начин.

$Student = array ("James Patt", "John Smith", "Susan Carter", "Joe Smith", "Janet Jones"); $array_Smit = preg_grep() ("/^Smith", $Student);


В горния код масивът Student се претърсва с функцията preg_grep() за елементи, съдържащи низа Smith. Резултатът ще бъде масив съдържащ John Smith и Joe Smith
Намиране разликата на два масива. До сега научихте, как можете да намирате уникалните елементи в масив. Сега да предположим, че искате да намерите елементите в даден масив, които не се срещат в друг масив. Можете да направите това, като използвате функцията array_diff(), за да намерите разликата на два масива. Функцията array_diff() има следния синтаксис:

array_diff($Масив_1, $Масив_2);

Функцията array_diff() връща елементите, които се намират в $Масив_1, но не и в $Масив_2. Можете да използвате тази функция, за да претърсите повече от един масив, като разделите масивите със запетая.

Обтъщане на реда на елементите в масив

Да предположим, че искате да обработвате даден масив в обратен ред. Ако масивът е кратък, можете да използвате функцията array_reverse(). Функцията array_reverse()приема като параметър масив, яиито ред искате да обърнете. Тя има следния синтаксис:

$array2 = array_reverse($array1);

Ако масивът ви е много голям, функцията array_reverse() ще отнеме много време. Тогава можете да използвате цикъла for(), за да обходите масива в обратен ред. Например, можете да обърнете масива Rate ( разглеждан преди това ), като използвате цикъла for по следния начин.

for (x = count($Rate) -1; Rate >= 0 ; X--) { // оператори }

Тук първо намираме общият брой на елементите, като използваме функцията count(). След това цикъла обхожда масива от последния елемент, до първия

Сортиране на масиви

Функцията sort() е проста функция предназначена за сортиране на елементи
Функцията sort()

Можете да използвате функцията sort(), за да сортирате масиви по числовия, или азбучен ред на елементите им. Тази функция променя индексите в масивите в зависимост от реда на сортиране. Например:

$Student = array("John", "James", "Susan"); sort ($Student);


Когато визуализирате индекса и стойността на елементите в масива, ще получите следния резултат


]0 James
1 John
2 Susan


Обърнете внимание, че индексите са променени след сортирането.
Сега да предположим, че имате асоциативен масив. Например:


]$Student = array ("JS" -=> "John Smith",
("JP" -=> "James Patt",
("SC" -=> "Susan Carter");


Ако сортирате масива, използвайки функцията sort(), и след това покажете индекса и стойността на елементите от масива, ще получите следния резултат:


0 James Patt
1 John Smith
2 Susan Carter


Обърнете внимание, че низовите индекси в асоциативния масив са преобразувани до числови индекси. това е големият проблем при използването на функцията sort() за сортирането на асоциативни масиви. Този проблем, може да се избегне, ако се използва функцията asort().
Съществуват няколко други функции, които ви помагат за сортирането на асоциативен и номериран масив. Те са:
asort(): Функцията asort() се използва за сортирането на масив, без да се променят индексите. Ако сортирате масива Student с функцията asort(), ще получите следния резултат:

JP James Patt
JS John Smith
SC Susan Carter


rsort() Функцията rsort() е подобна на функцията sort(). Единствената разлика е, че сортира елементите в обратен ред. Да разгледаме следния пример:

$Student = array ("John", "James", "Susan"); rsort($Student);


След сортирането на масива, функцията rsort() ще получи следния резултат:


0 Susan
1 John
2 James


arsort()Функцията arsort() е подобна на функцията asort(). Единствената разлика е, че сортира елементите в обратен ред. Да предположим, че искате да сортирате елементите на масива Student в обратен ред, като при това индексите остават непроменени. За да извършите това трябва да използвате функцията arsort().
Прилагайки на функцията arsort() за сортиране на масива Student, ще получите следния резултат:


SC Susan Carter
JS John James
JP James Patt


ksort()За да сортирате индексите на асоциативен масив, трябва да използвате функцията ksort(). Да предположим, че имате масива Student и трябва да го сортирате по индексите му.

$Student = array ("b" =>"Susan", "d" =>"Andrew", "a"=>"John", "c" => "James");


Сортирайки масива Student с помоща на функцията ksort(), ще получите следния резултат:


a John
b Susan
c James
d Andrew


krsort()Функцията krsort() е подобна на функцията ksort(). Единствената разлика е, че тя сортира елементите в обратен ред. Така, че ако използвате функцията krsort() върху масива Student, ще получите следния резултат


d Andrew
c James
b Susan
a John




/ Трябва да сте регистриран за да напишете коментар /