Какво е масив?
Масива е набор от променливи, които са подредени по определен начин. Можем да различим два типа масиви в РНР - числови и асоциативни. Числовите са характерни с това, че всеки елемент на масива се индексира с пореден номер, а асоциативните се индексират със символен низ.
Деклариране на масив
Масив се декларира по следния начин:
$arr = array():
В скобите може да зададете и големина на масива, ако е известна предварително. За пример ако масивът ви е от 20 елемента в скобите записвате "0..19". Т.е. номерирате ги от 0 до 19. Може да зададете и стойностите на масив при декларирането му:
$arr = array( 0 => 'Ivan',
1 => 'Pesho');
Това е числен масив с два елемента - 1 и 2. ето и пример за асоциативен масив:
$arr = array( 'name' => 'Ivan',
'age' => 21);
За разлика от други езици за програмиране, в РНР няма проблем един масив да съдържа различни типове данни, точно както в предния пример. елементът name е символен низ, докато age е число.
Достъп до стойности на масив
Ако масива е числен до отделните му стойности се достига по следния начин:
$arr[0] = 1;
А ако е асоциативен:
$arr['name'] = 'Ivan';
Приложение
Масивите са много често използвани типове данни. Тъй като понякога се налага да имате множество променливи, те често е удобно да бъдат в масив. Частен случай на масива е символният низ. Това е масив от символи. Вижда се, че приложението на тази структура е много голямо и всеобхватно и точно за това съм отделел един цял урок само за масиви.
Ще ви подскажа че в някой случаи функция може да изисква множество параметри. Ако те са изброени със запетая, това често ще води до грешки. Решеинето е да обедините тези параметри в асоциативен масив и да предадете само него. Така единственото, което трябва да съобразявате е какво записвате в масива.
Многомерни масиви
Ако имате ситуация, в която трябва да манипулирате точки от координатна система, ще ви се наложи да ползвате таблица от стойности. Масивите могат да бъдат представени и като такива структури, по следния начин:
$arr = array( array() ):
Това всъщност е двумерен масив и до елементите му се достига с два индекса: $arr[0][1].
Работа с масиви
Нека първо да разгледаме достигане до всчки стойности на даден масив с цикъл for:
for ($i=0 ; $i < 5; $i++ )
echo $products[$i];
Този код ще изведе към браузера съдържанието на първите 5 елемента от масива $products. За улеснение в РНР има специален цикъл, който работи само с масиви. Ето аналог на горния код:
foreach ($products as $costs)
echo $costs;
Този цикъл ще предава при всяко превъртане на $costs стойността, отговаряща за поредния индекс. За работа с асоциативен масив ползвайте:
foreach($products as $name => $cost)
echo "Наименование на продукта: {$name}; Цена: {$cost};";
Така извеждате имената и цените на продуктите, съдържащи се в масива $products. Моще също така да ползвате ключовата дума each :
while ($element = each( $products ))
echo "Наименование на продукта: {$element['key']};Цена: {$element['value']};" ;
Можем да направим същото и с list:
while ( list($name, $price) = each( $products ) )
echo "$name - $price";
Кой метод ще изберете - това е донякъде лично предпочитание. Изберете това, което ви се струва най-ясно.
Сортиране
Много често се налага данни в даден масив да бъдат сортирани. Ще се спра на най-важните функции. Първата е сортиране по азбучен ред:
sort($products);
Ако искате да направите сортиране в обратен азбучен ред, ползвайте rsort(); . Ако масива е асоциативен, може да сортирате по ключ - asort() или по стойност - ksort(). В обратен ред тези функции са arsort() и krsort().
Соритране на многомерни масиви
За сортирането на многомерен масив е нужно да си създадете функция за сравнение. Тя трябва да има 2 параметъра и да връща 0 за еквивалентност, 1 за по-голямо и -1 за по-малко. Нека си дефинираме такава:
function compare($x, $y)
{
if ($x[1] == $y[1])
return 0;
else if ($x[1] > $y[1])
return 1;
else
return -1;
}
Сега за да соритраме двумерен масив по втория индекс.Можем да изпълним сортирането със следната функция:
usort($products, 'compare');
За да преброите броя на променливите в масив използвайте count().