Контакти

Команда foreach мови php. Цикли do while і foreach. Зміна внутрішнього покажчика масиву під час ітерації

Часто потрібно пройти по всіх елементах масиву PHP і провести якусь операцію над кожним елементом. Наприклад, ви можете вивести кожне значення в таблицю HTML або задати кожному елементу нового значення.

В даному уроці ми розглянемо конструкцію foreach при організації циклу по індексованих і асоційованим масивів.

Цикл за значеннями елементів

Найпростіший випадок використання foreach - це організація циклу за значеннями в індексованих масиві. Основний синтаксис:

Foreach ($ array as $ value) (// Робимо що-небудь з $ value) // Тут код виконується після завершення циклу

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

$ Directors \u003d array ( "Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); foreach ($ directors as $ director) (echo $ director. "
"; }

Вище наведений код виведе:

Alfred Hitchcock Stanley Kubrick Martin Scorsese Fritz Lang

Цикл по ключам і значенням

А що щодо асоційованих масивів? При використанні такого типу масивів часто потрібно мати доступ до ключа кожного елемента, так само як і до його значенню. Конструкція foreach має спосіб вирішити поставлене завдання:

Foreach ($ array as $ key \u003d\u003e $ value) (// Робимо що-небудь з $ key і / або з $ value) // Тут код виконується після завершення циклу

Приклад організації циклу щодо асоційованого масиву з інформацією про кінофільмах, виводить ключ кожного елемента і його значення в HTML списку визначень:

$ Movie \u003d array ( "title" \u003d\u003e "Rear Window", "director" \u003d\u003e "Alfred Hitchcock", "year" \u003d\u003e 1954 "minutes" \u003d\u003e 112); echo "

"; Foreach ($ movie as $ key \u003d\u003e $ value) (echo"
$ Key:
"; Echo"
$ value
";) Echo"
";

Даний скрипт при виконанні виведе:

Title: Rear Window director: Alfred Hitchcock year: 1954 minutes: 112

Зміна значення елемента

А як справи зі зміною значення елемента при проході циклу? Ви можете спробувати такий код:

Foreach ($ myArray as $ value) ($ value \u003d 123;)

Однак, якщо запустити його на виконання, то ви виявите, що значення в масиві не змінюються. Причина полягає в тому, що foreach працює з копією значень масиву, а не з оригіналом. Таким чином оригінальний масив залишається недоторканим.

Для зміни значень масиву вам потрібна посилання на значення. Для цього потрібно поставити знак & перед змінній значення в конструкції foreach:

Foreach ($ myArray as & $ value) ($ value \u003d 123;)

Наприклад, наступний скрипт проходить циклом кожен елемент (ім'я режисера) в масиві $ directors, і використовує функцію PHP explode () і конструкцію list для зміни місць імені та прізвища:

$ Directors \u003d array ( "Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); // Змінюємо формат імені для кожного елемента foreach ($ directors as & $ director) (list ($ firstName, $ lastName) \u003d explode ( "", $ director); $ director \u003d "$ lastName, $ firstName";) unset ( $ director); // Виводимо кінцевий результат foreach ($ directors as $ director) (echo $ director. "
"; }

Скрипт виведе:

Hitchcock, Alfred Kubrick, Stanley Scorsese, Martin Lang, Fritz

Відзначимо, що скрипт викликає функцію unset () для видалення змінної $ director після завершення першого циклу. Це хороша практика, якщо ви плануєте використовувати змінну пізніше в скрипті в іншому контексті.

Якщо не видаляти посилання, то є ризик при подальшому виконанні коду випадкової посилання на останній елемент в масиві ( "Lang, Fritz"), якщо далі використовувати змінну $ director, що призведе до непередбачених наслідків!

резюме

В даному уроці ми розглянули, як використовувати конструкцію PHP foreach для організації циклу за елементами масиву. Були розглянуті питання:

  • Як організувати цикл за елементами масиву
  • Як отримати доступ до ключа і значенням кожного елемента
  • Як використовувати посилання для зміни значень при проході циклу

Цикл PHP foreach можна використовувати наступним чином:

foreach ($ array_name as $ value) (// код, який повинен виконуватися)

foreach ($ array_name as $ key \u003d\u003e $ value) (// // код, який повинен виконуватися)

Приклад використання циклу foreach з числовим масивом

У цьому прикладі ми створимо масив з п'яти елементів з числовими значеннями. Після цього цикл PHP foreach буде використаний для виконання ітерації цього масиву. Всередині циклу foreach ми використовували echo, щоб вивести значення масиву:

Подивитися демо-версію і код

Приклад з ключами і значеннями масиву

У цьому прикладі описаний інший спосіб використання циклу foreach PHP. Для цього ми створили асоціативний масив з трьох елементів. У нього входять імена співробітників ( в якості ключів) І суми заробітної плати ( в якості значень):

Подивитися демо-версію і код

Приклад зміни значення елемента масиву в циклі foreach

Також можна c допомогою PHP array foreach можна змінювати значення елементів масиву. Для цього використовується «&» перед «$» для змінної значення. наприклад:

& $ Value_of_element

Значення буде змінено. Щоб вам було зрозуміліше, розглянемо наступний приклад.

У цьому прикладі ми створили числовий масив з п'яти елементів. Після цього використовували цикл foreach для відображення значень елементів.

Потім створили ще один цикл foreach, де перед $ value_of_element додається «&«. Усередині фігурних дужок присвоюємо нові значення елементів масиву.

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

Подивитися демо-версію і код

Для чого використовується цикл PHP foreach?

Цикл PHP foreach використовується для роботи з масивом. Він перебирає кожен його елемент.

Також можна використовувати для роботи з масивами цикл for. Наприклад, використовуючи властивість length, щоб отримати довжину масиву, а потім застосувати його в якості оператора max. Але foreach робить це простіше, так як він призначений для роботи з масивами.

Якщо ви працюєте з MySQL, то для цього даний цикл підходить ще більше. Наприклад, можна вибрати кілька рядків з таблиці БД і передати їх в масив. Після цього, використовуючи цикл foreach, перебрати всі елементи масиву з виконанням будь-якої дії.

Зверніть увагу, що можна використовувати цикл foreach з масивом або тільки з об'єктом.

Застосування циклу foreach

У PHP існує два способи використання циклу foreach PHP. Обидва описані нижче.

  • Синтаксис першого методу використання:

foreach ($ array_name as $ value) (echo $ value)

При цьому потрібно вказати ім'я масиву, а потім змінну $ value.

Для кожної ітерації значення поточного елемента присвоюється змінної $ value. Після завершення ітерації змінної присвоюється значення наступного елемента. І так до тих пір, поки всі елементи масиву не будуть перебрані.

  • Синтаксис другого методу ( PHP foreach as key value):

Це підходить для асоціативних масивів, в яких використовуються пари ключ / значення.

Під час виконання кожної ітерації значення поточного елемента буде присвоєно змінної $ value_of_element. Крім цього ключ елемента присвоюється змінної $ key_of_element.

Якщо ви працюєте з числовими масивами, то можна використовувати перший метод, в якому не потрібні ключі елементів.

Дана публікація є перекладом статті « PHP foreach loop 2 ways to use it», Підготовленої дружною командою проекту

Конструкція foreach є різновидом for, включену в мову для спрощення перебору елементів масиву. Існують два різновиди команди foreach, призначені для різних типів масивів:

foreach (масив as $ елемент) (

foreach (масив as $ ключ \u003d\u003e $ елемент) (

Наприклад, при виконанні наступного фрагмента:

$ Menu \u003d аrrау ( "pasta", "steak", "potatoes", "fish", "fries");

foreach ($ menu as $ item) (

print "$ item
";

буде виведений наступний результат:

У цьому прикладі слід звернути увагу на дві обставини. По-перше, конструкція foreach автоматично повертається в початок масиву (в інших циклічних конструкціях цього не відбувається). По-друге, немає необхідності явно збільшувати лічильник або іншим способом переходити до наступного елементу масиву - це відбувається автоматично при кожній ітерації foreach.

Другий варіант використовується при роботі з асоціативними масивами:

$ Wine_inventory \u003d array (

"Merlot" \u003d\u003e 15,

"Zinfandel" \u003d\u003e 17,

"Sauvignon" \u003d\u003e 32

foreach ($ wine_inventory as $ i \u003d\u003e $ item_count) (

print "$ item_count bottles of $ i remaining
";

В цьому випадку результат виглядає так:

15 bottles of merlot remaining

17 bottles of zinfandel remaining

32 bottles of sauvignon remaining

Як видно з наведених прикладів, конструкція foreach помітно спрощує роботу з масивами.

Принцип роботи конструкції switch частково нагадує if - результат, отриманий при обчисленні виразу, перевіряється за списком потенційних збігів.

Це особливо зручно при перевірці кількох значень, оскільки застосування switch робить програму більш наочною і компактною. Загальний формат команди switch:

switch (вираз) (

case (умова):

case (умова):

Проверяемое умова вказується в круглих дужках після ключового слова switch. Результат його обчислення послідовно порівнюється з умовами в секціях case. При виявленні збігу виконується блок відповідної секції. Якщо збіг не буде виявлено, виконується блок необов'язковою секції default.

Як буде показано в наступних розділах, однією з найсильніших сторін РНР є обробка призначеного для користувача введення. Припустимо, програма відображає список, що розкривається з декількома варіантами і кожен рядок списку є певною команді, виконуваної в окремій конструкції case. Реалізацію дуже зручно побудувати на використанні команди switch:

$ User_input \u003d "recipes"; // Команда, обрана користувачем

switch ($ user_input):

case ( "search"):

print "Let" s perform a search! ";

case ( "dictionary"):

print "What word would you like to look up?";

case ( "recipes"):

print "Here is a list of recipes ...";

print "Here is the menu ...";

Як видно з наведеного фрагменту, команда switch забезпечує чітку і наочну організацію коду. Змінна, зазначена в умови switch (в даному прикладі - $ user_input), порівнюється з умовами всіх наступних секцій case. Якщо значення, вказане в секції case, збігається Зі значенням порівнюєш змінної, виконується блок цієї секції. Команда break запобігає перевірку подальших секцій case і завершує виконання конструкції switch. Якщо жодне з перевірених умов не виконується, активізується необов'язкова секція default. Якщо секція default відсутня і жодна з умов не виконується, команда switch просто завершується і виконання програми продовжується з наступної команди.

Ви повинні пам'ятати, що при відсутності в секції case команди break (див. Наступний розділ) виконання switch продовжується з наступної команди до тих пір, поки не зустрінеться команда break або не буде досягнутий кінець конструкції switch. Наступний приклад демонструє наслідки відсутності забутої команди break: $ value \u003d 0.4;

switch ($ value):

print "value is 0.4
";

print "value is 0.6
";

print "value is 0.3
";

print "You didn" t choose a value! ";

Результат виглядає так:

Відсутність команди break призвело до того, що було виконано не тільки команда print в тій секції, де було знайдено збіг, але і команда print в наступній секції. Потім виконання команд конструкції switch перервалося через команди switch, наступного за другою командою print.

Вибір між командами switch і if практично не впливає на швидкодію про-грами. Рішення про використання тієї чи іншої конструкції є скоріше особистою справою програміста.

Команда break негайно перериває виконання тієї конструкції while, for або switch, в якій вона знаходиться. Ця команда вже згадувалася в попередньому розділі, однак переривання поточного циклу не вичерпує можливостей команди break. У загальному вигляді синтаксис break виглядає так:

Необов'язковий параметр n визначає кількість рівнів керуючих конструкцій, завершує командою break. Наприклад, якщо команда break вкладена в дві команди while і після break стоїть цифра 2, відбувається негайний вихід з обох циклів. За замовчуванням значення n дорівнює 1; вихід на один рівень може позначатися як явним зазначенням 1, так і зазначенням команди break без параметра. Зверніть увагу: команда i f не відноситься до числа керуючих конструкцій, що перериваються командою break.

Цикли do while і foreach

Цикл do. . . while

Цикл do ... while в C # - це версія while з постпроверкой умови. Це означає, що умова циклу перевіряється після виконання тіла циклу. Отже, цикли do ... while зручні в тих ситуаціях, коли блок операторів повинен бути виконаний як мінімум один раз. Нижче наведена загальна форма оператора циклу do-while:

do (оператори;) while (умова);

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

Using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 (class Program (static void Main (string args) (try (// Обчислюємо факторіал числа int i, result \u003d 1, num \u003d 1; Console.WriteLine ( "Введіть число:"); i \u003d int.Parse (Console .ReadLine ()); Console.Write ( "\\ n \\ nФакторіал (0) \u003d", i); do (result * \u003d num; num ++;) while (num

цикл foreach

цикл foreach служить для циклічного звернення до елементів колекції, що представляє собою групу об'єктів. У C # визначено кілька видів колекцій, кожна з яких є масивом. Нижче наведена загальна форма оператора циклу foreach:

foreach (тип імя_переменной_цікла in колекція) оператор;

тут тип імя_переменной_цікла позначає тип і ім'я змінної управління циклом, яка отримує значення наступного елемента колекції на кожному кроці виконання циклу foreach. А колекція позначає циклічно опитує колекцію, яка тут і далі є масивом. Отже, тип змінної циклу повинен відповідати типу елемента масиву. Крім того, тип може позначатися ключовим словом var. В цьому випадку компілятор визначає тип змінної циклу, виходячи з типу елемента масиву. Це може виявитися корисним для роботи з певного роду запитами. Але, як правило, тип вказується явно.

Оператор циклу foreach діє таким чином. Коли цикл починається, перший елемент масиву вибирається і присвоюється змінної циклу. На кожному наступному кроці ітерації вибирається наступний елемент масиву, який зберігається в змінної циклу. Цикл завершується, коли всі елементи масиву виявляться обраними.

Цикл foreach дозволяє проходити по кожному елементу колекції (об'єкт, який представляє список інших об'єктів). Формально для того, щоб щось можна було розглядати як колекцію, це щось повинне підтримувати інтерфейс IEnumerable. Прикладами колекцій можуть служити масиви C #, класи колекцій з простору імен System.Collection, а також призначені для користувача класи колекцій.



Сподобалася стаття? поділіться їй