Научи РНР - Урок 4, масиви


Какво е масив?

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

Деклариране на масив

Масив се декларира по следния начин:

$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(). Източник: http://www.eadvise.info