Перебір елементів масиву

завдання
Необхідно перебрати по черзі і обробити всі або деякі еле
менти масиву.

Рішення
Використовуйте оператор foreach:

foreach ($ array as $ value) // Дія з $ value
>

Або для отримання ключів і значень масиву:

foreach ($ array as $ key => $ value) // Дія II
>

Іншим способом є застосування оператора for:
for ($ key = 0, $ size = count ($ array); $ key $ cost).
>

В операторі foreach PHP перебирає НЕ вихідний масив, а його копію.


Навпаки, при використанні функції each () і оператора for, PHP перебирає оригінальний масив. Тому, якщо всередині циклу відбувається модифікація масиву, то можна отримати (а можна і не отримати) очікувану поведінку.

Якщо необхідно змінити масив, то використовуйте пряме посилання на нього:

Змінні, що повертаються функцією each (), не посилаються на вихідні значення масиву
- це їх копії, тому їх зміна не позначається на масиві. Ось чому потрібно модифікувати змінну $ items [$ item] замість змінної $ item.

При використанні функції each () PHP відстежує і запам'ятовує положення всередині циклу. Щоб почати цикл спочатку після виконання першого проходу, потрібно викликати функцію reset () для того, щоб повернути покажчик назад в положення перед циклом. В протилежному
випадку функція each () поверне значення false.

Цикл for працює тільки в разі масивів з послідовними цілими ключами. Якщо довжина масиву не змінюється, то нееффектівнопрі кожному проходженні циклу знову викликати функцію count () для обчислення змінної $ items.


Тому для зберігання довжини масиву завжди використовуйте змінну $ size:

for ($ item = 0, $ size = count ($ items); $ item = 0; $ item--).
>

Асоціативна версія циклу for:

for (reset ($ array); $ key = key ($ array); next ($ array)).
>

Це призведе до помилки, якщо який-небудь елемент містить рядок зі значенням, прирівняним до false, тому начебто нормальне значення, таке як 0, може привести до дострокового завершення циклу.

Нарешті, потрібно скористатися функцією array_map () для передачі кожного елемента обробної функції:

// переводимо всі слова в нижній регістр
$ Lc = array_map ( 'strtolower', $ words);

Першим аргументом функції array_map () є ім'я функції, яка модифікує окремий елемент, а другий аргумент - це масив, що обробляється в циклі.

Як правило, ці функції вважаються менш гнучкими, порівняно з раніше розглянутими методами, але вони добре підходять для обробки і об'єднання безлічі масивів.


Якщо не відомо, чи повинні оброблятися дані як скалярні величини або як масив, то необхідно запобігти використанню оператора foreach з не масивом. Один із способів - це застосування функції is_array ():

if (is_array ($ items)) // код з циклом foreach для масиву
> Else // код для скалярної величини
>

Іншим способом є примусове перетворення всіх змінних в масив за допомогою функції settype ():

settype ($ items, 'array');
// код циклу для масивів

Це перетворює скалярний значення в одноелементний масив і робить код більш привабливим за рахунок невеликих додаткових накладних витрат.