Меню

Първи стъпки в правене на сайтове

Влез Излез

Масиви в PHP (част 3) – асоциативни масиви

В миналата от поредицата за масиви в PHP говорихме за custom ключове. В това продължение ще разгледаме ситуации, в които тези custom ключове не са от числов тип, а във формата на текст. Наричаме ги асоциативни масиви.

Случаите, в които е подходящо да използваме такива е, когато ни се налага да използваме двойки данни, в които единият елемент може да бъде ID или някакъв друг ключ, а отговарящата му стойност е по-приятна за крайните потребители.

Пример би бил асоциативен масив, в който дните от седмицата за ключ имат абривиатура:

$days_of_week = array(
    'mon' => 'Monday',
    'tue' => 'Tuesday',
    'wed' => 'Wednesday',
    'thu' => 'Thursday',
    'fri' => 'Friday',
    'sat' => 'Saturday',
    'sun' => 'Sunday'
);

Друг пример за асоциативен масив би бил списък със социални мрежи:

$social_networks = array(
    'fb' => 'Facebook',
    'tw' => 'Twitter',
    'gplus' => 'Google Plus',
    'li' => 'LinkedIn',
    'insta' => 'Instagram'
);

Както виждате в горния пример някои от ключовете са само по 2 букви, други са по-описателни, но винаги служат като съкращение за името на социалната мрежа.

Горният пример би могъл да се използва в случай, в който искаме да покажем списък, в който използваме различни стилове за всеки елемент, показвани в web страницата ни. Можем да базираме тези стилове на класове и горният масив да се използва за:

echo '<ul id="social-networks">';

foreach ($social_networks as $class => $label) {
    echo '<li class="' . $class . '">' . $label . '</li>';
}

echo '</ul>';

Така можем лесно да комбинираме с елементарен CSS, който да покаже всяка мрежа с различен цвят:

.fb { color: blue; }
.tw { color: lightblue; }
.gplus { color: red; }
.li { color: darkblue; }
.insta { color: blueviolet; }

Вложени асоциативни масиви

За да направим нещата още малко по-интересни нека разгледаме следното:

$social_links = array(
    'facebook' => array('url' => 'http://facebook.com/', 'label' => 'Facebook'),
    'twitter' => array('url'=> 'http://twitter.com/', 'label' => 'Twitter'),
    'google-plus' => array('url'=> 'http://plus.google.com/', 'label' => 'Google Plus')
);

echo '<ul class="social-links">';

foreach ($social_links as $class => $data) {
    echo '<li class="' . $class . '">';
    echo '<a href="' . $data['url'] . '">' . $data['label'] . '</a>';
    echo '</li>';
}

echo '</ul>';

Първо с помощта на foreach цикъл обхождаме всички елементи, като използваме ключа за допълнителни стилове (можем дори да покажем иконка, описана в CSS-а), а останалата информация е под формата на нов асоциативен масив. Неговите данни можем да достъпим като $data['url'] и $data['label'].

Както виждате употребата на асоциативни масиви е удобна по 2 основни причини:

  1. двойка ключ-стойност, където ключът нови повече информация от просто някакъв пореден номер

  2. лесен достъп до стойностите от масива, без да е нужно да помним точния индекс на елемента, а дори и реда на дефиниране

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax