Вы находитесь на странице: 1из 165

Раздел 2:

Массивы и функции
План вебинара
План вебинара

– Что такое массивы


План вебинара

– Что такое массивы


– Практика работы с массивами
План вебинара

– Что такое массивы


– Практика работы с массивами
– Циклы
План вебинара

– Что такое массивы


– Практика работы с массивами
– Циклы
– Обход массивов
План вебинара

– Что такое массивы


– Практика работы с массивами
– Циклы
– Обход массивов
– Стандартная библиотека PHP
План вебинара

– Что такое массивы


– Практика работы с массивами
– Циклы
– Обход массивов
– Стандартная библиотека PHP
– Пишем свои функции
План вебинара

– Что такое массивы


– Практика работы с массивами
– Циклы
– Обход массивов
– Стандартная библиотека PHP
– Пишем свои функции
– Отладка кода
План вебинара

– Что такое массивы


– Практика работы с массивами
– Циклы
– Обход массивов
– Стандартная библиотека PHP
– Пишем свои функции
– Отладка кода
– PhpStorm - среда разработки для PHP
Массивы
тип данных для представления множества значений.
Переменная-массив может хранить список из
обычных значений разных типов
Массив - как папка для бумаг
Каждый документ в папке - это отдельный элемент
массива
Хранение данных в массиве
Каждое значение сохраняется в массиве под 

своим адресом – индексом
Хранение данных в массиве
Каждое значение сохраняется в массиве под 

своим адресом – индексом

Индекс – это порядковый номер с нумерацией от нуля


Хранение данных в массиве
Каждое значение сохраняется в массиве под 

своим адресом – индексом

Индекс – это порядковый номер с нумерацией от нуля

0 1 2 3
Простой массив
список значений, где каждый элемент хранится под
своим числовым индексом
Что такое список значений
Что такое список значений

– Переменные хранят простые значения: 



число, слово, предложение, ложь/истину
Что такое список значений

– Переменные хранят простые значения: 



число, слово, предложение, ложь/истину

– Что если нужно хранить несколько 



значений как одно целое?
Что такое список значений

– Переменные хранят простые значения: 



число, слово, предложение, ложь/истину

– Что если нужно хранить несколько 



значений как одно целое?

– Например: список покупок, список гостей и т.д.


Что такое список значений

– Переменные хранят простые значения: 



число, слово, предложение, ложь/истину

– Что если нужно хранить несколько 



значений как одно целое?

– Например: список покупок, список гостей и т.д.


Пример простого массива
Пример простого массива

Список категорий
Пример простого массива

Список категорий Представление в


массиве

$categories = [

"Видеоигры", "Животные", "Люди", 

"Наука", "Приколы", "Спорт", 

"Фейлы", "Фильмы и анимация"

];
Работа с простыми массивами
Работа с простыми массивами
Создание пустого массива:

$my_friends = [];
Работа с простыми массивами
Создание пустого массива:

$my_friends = [];

Создание заполненного массива:

$cats = ["Игры","Приколы","Фейлы"];
Работа с простыми массивами
Создание пустого массива:

$my_friends = [];

Создание заполненного массива:

$cats = ["Игры","Приколы","Фейлы"];

Добавление элементов в массив:

$my_friends[] = "Winnie Pooh";


Работа с простыми массивами
Создание пустого массива:

$my_friends = [];

Создание заполненного массива:

$cats = ["Игры","Приколы","Фейлы"];

Добавление элементов в массив:

$my_friends[] = "Winnie Pooh";

или
array_push($my_friends, "Tigger")
Работа с простыми массивами
Работа с простыми массивами
Чтение элемента по индексу:

print($cats[0]);
Работа с простыми массивами
Чтение элемента по индексу:

print($cats[0]);

Замена элемента по индексу:

$cats[0] = "Офис";
Работа с простыми массивами
Чтение элемента по индексу:

print($cats[0]);

Замена элемента по индексу:

$cats[0] = "Офис";

Узнать всё содержимое массива:

var_dump($cats);
array(3) {
  [0] => string(10) "Игры"
Используется только в
  [1] => string(14) "Приколы"
отладочных целях
  [2] => string(10) "Фейлы"
}
Работа с простыми массивами
Работа с простыми массивами
Получить первый элемент массива:

print($cats[0]);

или
print(array_shift($cats));
Работа с простыми массивами
Получить первый элемент массива:

print($cats[0]);

или
print(array_shift($cats));

Получить последний элемент массива:

print($cats[count($cats) - 1]);

или

print(array_pop($cats));
Ассоциативный массив
массив, где каждый элемент сохраняется с
указанием ключа.

Ключ - это произвольная строка
Как описать своего кота?
невозможно описать кота одним словом, например
нельзя сказать, что кот это 42 или что моего кота
зовут ‘Феофан’.
Поэтому для описания вашего кота вам потребуется
много параметров
Как описать кота?

– кличка
– пол
– порода
– окрас
– тип шерсти
– рост, вес
– скорость
Пример ассоциативного массива
Пример ассоциативного массива
Одна гифка
Пример ассоциативного массива
Одна гифка Эта гифка в виде массива

$gif = [
  'gif' => '/img/cat.gif’,
  'title' => 'Типичный юзер’,
  'author' => 'frexin’,
  'likes_count' => 1
];
Ассоциативные массивы
Ассоциативные массивы

– Значения сохраняются по ключу – строке


Ассоциативные массивы

– Значения сохраняются по ключу – строке


– Нет порядковых индексов
Ассоциативные массивы

– Значения сохраняются по ключу – строке


– Нет порядковых индексов
– Подходят для словарей вида
«ключ – значение»
Ассоциативные массивы

– Значения сохраняются по ключу – строке


– Нет порядковых индексов
– Подходят для словарей вида
«ключ – значение»

– Удалять элементы можно только по их ключу


Ассоциативные массивы

– Значения сохраняются по ключу – строке


– Нет порядковых индексов
– Подходят для словарей вида
«ключ – значение»

– Удалять элементы можно только по их ключу


Работа с ассоциативными массивами
Работа с ассоциативными массивами
Создание массива:
$cat = [
  'gender' => 'male’,
  'name’   => 'keks’,
  'color’  => 'yellow’,
  'age’    => 1.5
];
Работа с ассоциативными массивами
Создание массива:
$cat = [
  'gender' => 'male’,
  'name’   => 'keks’,
  'color’  => 'yellow’,
  'age’    => 1.5
];

Добавление/замена значений:
$cat['weight'] = 2;
Работа с ассоциативными массивами
Создание массива:
$cat = [
  'gender' => 'male’,
  'name’   => 'keks’,
  'color’  => 'yellow’,
  'age’    => 1.5
];

Добавление/замена значений:
$cat['weight'] = 2;

Получение элемента по ключу:

print($cat['name']);
Функции для работы с массивами
Тестовый массив

$cats = ["Животные", "Люди", "Наука", "Приколы", "Спорт", "Видеоигры"];


Функции для работы с массивами
Тестовый массив

$cats = ["Животные", "Люди", "Наука", "Приколы", "Спорт", "Видеоигры"];

count($cats) 6
Считает количество элементов в массиве
Функции для работы с массивами
Тестовый массив

$cats = ["Животные", "Люди", "Наука", "Приколы", "Спорт", "Видеоигры"];

count($cats) 6
Считает количество элементов в массиве

isset($cats[2]) true
Проверяет существование в массиве элемента по его ключу (индексу)
Функции для работы с массивами
Тестовый массив

$cats = ["Животные", "Люди", "Наука", "Приколы", "Спорт", "Видеоигры"];

count($cats) 6
Считает количество элементов в массиве

isset($cats[2]) true
Проверяет существование в массиве элемента по его ключу (индексу)

in_array($cats, 'Люди') true


Проверяет существование в массиве элемента по его значению
Функции для работы с массивами
Тестовый массив

$cats = ["Животные", "Люди", "Наука", "Приколы", "Спорт", "Видеоигры"];

count($cats) 6
Считает количество элементов в массиве

isset($cats[2]) true
Проверяет существование в массиве элемента по его ключу (индексу)

in_array($cats, 'Люди') true


Проверяет существование в массиве элемента по его значению

sort($cats) ["Видеоигры", "Животные", "Люди", "Наука", "Приколы", "Спорт"]

Сортирует массив: числовые значения – по возрастанию, строковые – по алфавиту


Двумерные массивы
значениями любого массива могут быть другие
массивы.

Массив с массивами принято называть двумерным
Двумерные массивы
Двумерные массивы

0 1 2

3 4 5
Двумерные массивы
Чаще всего двумерные массивы используются для 

показа списка сложных объектов:
• телефонная книга
• список гифок
• список пользователей
Двумерные массивы
Чаще всего двумерные массивы используются для 

показа списка сложных объектов:
• телефонная книга
• список гифок
• список пользователей

Двумерный массив – это простой массив, каждый элемент 



которого является другим массивом
Пример двумерного массива
$persons = [

    0 => [

        'name' => 'Tyrion Lannister',

        'gender' => 'male',

        'is_dead' => false

    ],

    1 => [

        'name' => 'Sansa Stark',

        'gender' => 'female',

        'is_dead' => false

    ],

    2 => [

        'name' => 'Joffrey Lannister',

        'gender' => 'male',

        'is_dead' => true

    ]

];
Двумерные массивы: практика
Двумерные массивы: практика
Одна гифка:

$gif = [

    'gif' => '/img/cat.gif', 

    'title' => 'Типичный юзер', 

    'author' => 'frexin', 

    'likes_count' => 1

];
Двумерные массивы: практика
Одна гифка:

$gif = [

    'gif' => '/img/cat.gif', 

    'title' => 'Типичный юзер', 

    'author' => 'frexin', 

    'likes_count' => 1

];

Список гифок:

$gif_list = [$gif, $gif, $gif];


Двумерные массивы: практика
Двумерные массивы: практика
Показать название первой гифки:

print($gif_list[0]['title']);
Двумерные массивы: практика
Показать название первой гифки:

print($gif_list[0]['title']);

Получить случайную гифку:

$index = array_rand($gifs);

$random_gif = $gifs[$index];
Двумерные массивы: практика
Показ одной гифки из массива в HTML коде:
<ul class="gif-list">

    <?php $gif = $gifs[0]; ?>

    <li class="gif gif-list __item">

        <div class="gif __picture">

            <a href="/gif/view?id =< ?=$gif['id'];?>" class="gif __preview">

                <img src="uploads/preview_< ?=$gif['path']; ?>">

            </a>

        </div>

        <div class="gif __desctiption">

            <h3 class="gif __desctiption-title">

                <a href="/gif/view?id =< ?=$gif['id'];?>">

                    < ?=$gif['title'];?>

                </a>

            </h3>

            <div class="gif __description-data">

                <span class="gif __username">@< ?=$gif['authorName'];?> </span>

                <span class="gif __likes">< ?=$gif['like_count']; ?> </span>

            </div>

        </div>

    </li>

</ul>
Перерыв на 10 минут
Циклы
конструкция языка, которая выполняет заданный
блок кода более одного раза
Синтаксис цикла

while (<условие цикла>) {


<тело цикла>
}
Синтаксис цикла
Выражение, результат
которого будет true или false

while (<условие цикла>) {


<тело цикла>
}
Синтаксис цикла
Выражение, результат
которого будет true или false

while (<условие цикла>) {


<тело цикла>
}
Блок кода.
Выполняется, пока выражение
истинно
Интересные факты о циклах
Интересные факты о циклах

– Состоят из тела и условия


Интересные факты о циклах

– Состоят из тела и условия


– Должны выполняться конечное число раз
Интересные факты о циклах

– Состоят из тела и условия


– Должны выполняться конечное число раз
– Каждый проход цикла называется «итерация»
Интересные факты о циклах

– Состоят из тела и условия


– Должны выполняться конечное число раз
– Каждый проход цикла называется «итерация»
– Можно прервать выполнение досрочно
Интересные факты о циклах

– Состоят из тела и условия


– Должны выполняться конечное число раз
– Каждый проход цикла называется «итерация»
– Можно прервать выполнение досрочно
– Могут быть вложенными
Пример цикла

<?php

$last_num = 1;


while ($last_num < 10) {

    print($last_num);

    $last_num = $last_num + 1;

}
Пример цикла
Начальное значение
переменной

<?php

$last_num = 1;


while ($last_num < 10) {

    print($last_num);

    $last_num = $last_num + 1;

}
Пример цикла
Начальное значение
переменной
Выражение - условие цикла

<?php

$last_num = 1;


while ($last_num < 10) {

    print($last_num);

    $last_num = $last_num + 1;

}
Пример цикла
Начальное значение
переменной
Выражение - условие цикла

<?php

$last_num = 1;


while ($last_num < 10) {

    print($last_num);

    $last_num = $last_num + 1;

}

Тело цикла
Цикл на практике
Написать цикл, который выведет на странице список
страниц для постраничной навигации
Что должно получиться
Что должно получиться
На странице:
Что должно получиться
На странице:

В HTML-коде:
Цикл для пагинации

<?php
$pages_count = 3;
$cur_page = 1;
?>
<ul class="pagination__control">
<?php while ($cur_page <= $pages_count) { ?>
<li class="pagination__item">
<a href="?page=<?=$cur_page;?>"><?=$cur_page;?></a>
</li>
<?php $cur_page++; } ?>
</ul>
Перечисляемый массив
Массив – это «перечисляемый» тип данных.
Значения массива могут быть последовательно
перебраны циклом.
Список категорий
Написать код, который выведет в HTML список
категорий из подготовленного массива
Показ списка категорий
Показ списка категорий
Внешний вид
Показ списка категорий
Внешний вид HTML-код списка
Реализация на PHP
<?php

$categories = ["Видеоигры", "Животные", "Люди", "Наука",

    "Приколы", "Спорт", "Фейлы", "Фильмы"];
?>

<div class="navigation __item">
<h3 class="navigation __title">Категории </h3>

    <nav class="navigation __links">        

        <?php $index = 0;

        $num = count($categories);

        while ($index < $num) {

            $cat = $categories[$index];

            print ('<a href="#">' . $cat . ' </a>');

            $index = $index + 1;

        } ?>    

    </nav>

</div>

Цикл foreach
foreach - специальный вид цикла, который
необходим только для перебора массивов
Использование foreach

foreach (<массив> as $key => $value) {


    <тело цикла>
}
Использование foreach

Здесь будет
следующее значение

foreach (<массив> as $key => $value) {


    <тело цикла>
}
Использование foreach

Здесь будет Здесь будет


следующий ключ следующее значение

foreach (<массив> as $key => $value) {


    <тело цикла>
}
Использование foreach

Здесь будет Здесь будет


Массив для обхода
следующий ключ следующее значение

foreach (<массив> as $key => $value) {


    <тело цикла>
}
Использование foreach

Здесь будет Здесь будет


Массив для обхода
следующий ключ следующее значение

foreach (<массив> as $key => $value) {


    <тело цикла>
}

Блок кода. Выполняется,


пока не обошли весь
массив
Преимущества foreach

• создан специально для итерации массивов


• требует писать гораздо меньше кода
• позволяет обращаться к ключам элементов
Преимущества foreach

• создан специально для итерации массивов


• требует писать гораздо меньше кода
• позволяет обращаться к ключам элементов

На каждой итерации цикла в переменных $key и $val 



будут значения следующего элемента массива
Показ списка гифок
<ul class="gif-list">    

<?php foreach ($gifs as $key => $val): ?>

    <li class="gif">

        <div class="gif __picture">

            <a href="/gif/view?id =< ?=$val['id']; ?>" class="gif __preview"> 

                    <img src="< ?=$val['gif']; ?>"> 

            </a>

        </div>

        <div class="gif __desctiption">

            <h3 class="gif __desctiption-title">

         <a href="/gif/view?id =< ?=$val['id'];?>">< ?=$val['title'];?> </a>

            </h3>

            <div class="gif __description-data">

                <span class="gif __username">@< ?=$val['author'];?> </span> 

                <span class="gif __likes">< ?=$val['likes_count'];?> </span>

            </div>

        </div>

    </li>    

<?php endforeach; ?>

</ul>
Функции
Что такое функция
блок кода, подпрограмма, которая может быть
именована и вызвана повторно
Зачем нужны функции
Главное предназначение функции – предотвратить дублирование кода
Зачем нужны функции
Главное предназначение функции – предотвратить дублирование кода

Функции обосабливают блок кода, выполняющий одну задачу, 



и позволяют повторно выполнить этот блок кода, 

обратившись к нему по имени.
Виды функций
Виды функций

Пользовательские
• Определяются программистом
• Используются как часть сценария
• Не имеют документирования
Виды функций

Пользовательские Встроенные
• Определяются программистом • Уже существуют в языке
• Используются как часть сценария • Нужны для решения общих задач
• Не имеют документирования • Хорошо документированы
Стандартная библиотека PHP
огромное количество (~ 2000) встроенных функций
на все случаи жизни
http://php.net/manual/ru/funcref.php
“Обратись к справочнику функций, 

прежде чем писать код для 

решения задачи самостоятельно”
–Мудрый Наставник
Категории функций
Категории функций

– Работа со строками
Категории функций

– Работа со строками
– Дата и время
Категории функций

– Работа со строками
– Дата и время
– Работа с файлами и каталогами
Категории функций

– Работа со строками
– Дата и время
– Работа с файлами и каталогами
– Математические функции
Категории функций

– Работа со строками
– Дата и время
– Работа с файлами и каталогами
– Математические функции
– Запуск внешних программ
Категории функций

– Работа со строками
– Дата и время
– Работа с файлами и каталогами
– Математические функции
– Запуск внешних программ
– Графика
Категории функций

– Работа со строками
– Дата и время
– Работа с файлами и каталогами
– Математические функции
– Запуск внешних программ
– Графика
– Базы данных
Категории функций

– Работа со строками
– Дата и время
– Работа с файлами и каталогами
– Математические функции
– Запуск внешних программ
– Графика
– Базы данных
– Работа с архивами
Из чего состоит функция

function <имя функции> (<аргумент 1>, …) {


    <тело функции>

    return <результат работы>


}
Из чего состоит функция

Имя должно быть уникальным,


как переменная

function <имя функции> (<аргумент 1>, …) {


    <тело функции>

    return <результат работы>


}
Из чего состоит функция

Имя должно быть уникальным, Кол-во аргументов:


как переменная от нуля и более

function <имя функции> (<аргумент 1>, …) {


    <тело функции>

    return <результат работы>


}
Из чего состоит функция

Имя должно быть уникальным, Кол-во аргументов:


как переменная от нуля и более

function <имя функции> (<аргумент 1>, …) {


    <тело функции>

    return <результат работы>


}
Функция может возвращать
результат внешнему коду
Свойства функций
Свойства функций

– Нужны, чтобы избежать дублирования кода


Свойства функций

– Нужны, чтобы избежать дублирования кода


– Результат выполнения может быть присвоен переменной
Свойства функций

– Нужны, чтобы избежать дублирования кода


– Результат выполнения может быть присвоен переменной
– Хорошая функция всегда возвращает результат
Свойства функций

– Нужны, чтобы избежать дублирования кода


– Результат выполнения может быть присвоен переменной
– Хорошая функция всегда возвращает результат
– Может принимать аргументы
Свойства функций

– Нужны, чтобы избежать дублирования кода


– Результат выполнения может быть присвоен переменной
– Хорошая функция всегда возвращает результат
– Может принимать аргументы
– Создает свою область видимости
Область видимости
контекст, внутри которого переменная была
определена и где к ней можно получить доступ
Аргументы и область видимости
Аргументы и область видимости

– Переменные, определенные за пределами функции 



называются «внешними»
Аргументы и область видимости

– Переменные, определенные за пределами функции 



называются «внешними»

– Переменные, определенные внутри функции 



называются «внутренними»
Аргументы и область видимости

– Переменные, определенные за пределами функции 



называются «внешними»

– Переменные, определенные внутри функции 



называются «внутренними»

– Внутри функции внешние переменные не видны


Аргументы и область видимости

– Переменные, определенные за пределами функции 



называются «внешними»

– Переменные, определенные внутри функции 



называются «внутренними»

– Внутри функции внешние переменные не видны


– Чтобы передать внешние переменные внутрь 

функции нужно использовать аргументы
Область видимости

<?php
$firstDigit = 2;
$secondDigit = 3;

function calculateAmount($first, $second) {


print($firstDigit);
print($first);
}
Область видимости
Внешняя область видимости

<?php
$firstDigit = 2;
$secondDigit = 3;

function calculateAmount($first, $second) {


print($firstDigit);
print($first);
}
Область видимости
Внешняя область видимости

<?php
$firstDigit = 2;
$secondDigit = 3;

function calculateAmount($first, $second) {


print($firstDigit);
print($first);
}

Внутренняя область видимости


Практика
создадим функцию для урезания переданного ей
текста до определенной длины
Отладка кода
процесс добавления в код отладочных записей и его
выполнение с целью поиска ошибки
Диагностика кода?
Окружение разработчика
Окружение разработчика

«Дедовский» способ

1. Поставить
отладочную запись
2. Добавить досрочный
выход из скрипта
3. Запустить сценарий
Окружение разработчика

«Дедовский» способ Современный способ

1. Поставить 1. Установить современную


отладочную запись IDE
2. Добавить досрочный 2. Поставить брейкпойнты
выход из скрипта 3. Запустить отладчик
3. Запустить сценарий
Функции для отладки
Функции для отладки

print_r()
Умеет выводить на экран или возвращать содержимое массива
Функции для отладки

print_r()
Умеет выводить на экран или возвращать содержимое массива

var_dump()
Распечатывает и форматирует все содержимое массива вместе 

с указанием типов и размерности
Функции для отладки

print_r()
Умеет выводить на экран или возвращать содержимое массива

var_dump()
Распечатывает и форматирует все содержимое массива вместе 

с указанием типов и размерности

die()

Досрочно прерывает выполнение кода


PhpStorm - среда разработки
Возможности PhpStorm
Возможности PhpStorm

– автодополнение и документирование
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
– автоматическая генерация кода
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
– автоматическая генерация кода
– автоматический рефакторинг
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
– автоматическая генерация кода
– автоматический рефакторинг
– поддержка HTML/JS/XML/чего угодно
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
– автоматическая генерация кода
– автоматический рефакторинг
– поддержка HTML/JS/XML/чего угодно
– легкая навигация по коду
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
– автоматическая генерация кода
– автоматический рефакторинг
– поддержка HTML/JS/XML/чего угодно
– легкая навигация по коду
– поддержка Гита и других VCS
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
– автоматическая генерация кода
– автоматический рефакторинг
– поддержка HTML/JS/XML/чего угодно
– легкая навигация по коду
– поддержка Гита и других VCS
– запускать и отладка сценариев
Возможности PhpStorm

– автодополнение и документирование
– статический анализ кода
– автоматическая генерация кода
– автоматический рефакторинг
– поддержка HTML/JS/XML/чего угодно
– легкая навигация по коду
– поддержка Гита и других VCS
– запускать и отладка сценариев
– выкладка кода на сервер
Лицензия на PhpStorm
Каждый студент этого интенсива имеет право 

на полугодовую лицензию PhpStorm

Обратитесь к куратору, он расскажет вам как её получить

Вам также может понравиться