СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Разработка кода ИС Практическая работа №26

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Разработка кода ИС Практическая работа №26»

Практическое занятие 26

Тема: «Работа с функциями для массивов в PHP»

Цель работы: приобретение навыков использования функций работы с массивами.

Краткие теоретические основания выполнения задания

Функций для работы с массивами в PHP достаточно много, и это неудивительно, если учесть, что с массивами при программировании приходится работать достаточно часто. И в этой статье мы разберём основные функции, которые создали для работы с массивами в PHP разработчики.

Для начала разберём простейшую функцию, которая проверяет находится ли элемент в массиве. Функция называется in_array():

$arr = array("Num", "Str", "Int");

if (in_array("Str", $arr)) echo "Элемент найден"; else echo "Элемент не найден";

?

Как видно из примера, данная функция проверяет наличие первого параметра среди значений массива, заданного вторым параметром. И возвращает true, если элемент найден, либо false, если не был найден. Особо продвинутые спросят: "А как же быть с такими вещами, как 0 и false, ведь это разные значения, но PHP их считает одинаковыми?". Для этого в функции in_array() существует ещё третий параметр, необязательный, который если имеет значение true, то функция сверяет не только значения, но и типы:

$arr = array(0, "Str", "Int");

if (in_array(false, $arr, true)) echo "Элемент найден"; else echo "Элемент не найден";

?

Ещё одна очень полезная функция ‐ array_unique(), которая принимает массив и возвращает массив без дублирующихся значений:


$arr = array(3, 5, "Val", 3, "Val", 7);

$arr_uniq = array_unique($arr); print_r($arr_uniq);

?

Как можно заметить, запустив скрипт, в получившемся массиве нет повторяющихся значений. Очень важные функции ‐ это функции извлечения части массива из исходного (аналог функции substr(), только она для строк):

$arr = array(12, 10, 15, "Name", "Some", -0.5);

$arr_2 = array_slice($arr, 3); print_r($arr_2);

?

Эта функция принимает два параметра: исходный массив и номер элемента, с которого должен начаться новый массив (напоминаю, что нумерация начинается с нуля). Как видно, новый массив будет от элемента, номер которого задан во втором параметре и до конца исходного массива. Также если добавить третий параметр, то можно задать длину нового массива:

$arr = array(12, 10, 15, "Name", "Some", -0.5);

$arr_2 = array_slice($arr, 3, 2); print_r($arr_2);

?

В результате, Вы увидите: "Array ( [0] = Name [1] = Some )".

Теперь перейдём к последней группе функций ‐ функциям сортировки массивов. Но для начала напоминаю разницу между списками и ассоциативными массивами. Список ‐ это массив, у которого индексами являются числа, которые упорядочены по возрастанию, начиная с 0. А ассоциативный массив ‐ это массив, у которого индексами является, вообще говоря, строки, которые называются ключами. Почему это так важно при сортировке? Если Вы сортируете список, то Вам совершенно не важно, чтобы сохранялась связка: "ключ значение", так как индексы не служат для идентификации значения, а служат лишь для обращения к нему. А в ассоциативном массиве первостепенное значение имеет именно связка: "ключзначение", поэтому необходимо, чтобы при сортировке она сохранялась.

Давайте начнём с простого: сортировки списков. Для этого существуют функции sort() и rsort().

Первая функция сортирует массив по возрастанию, а вторая по убыванию:

$arr = array(15, 12, "String", 40, -2, 0, 12); sort($arr);

print_r($arr); echo "
"; rsort($arr); print_r($arr);

?

Думаю, что здесь всё понятно.

Теперь перейдём к функциям сортировки ассоциативных массивов: asort() и arsort(). Делают они всё тоже самое, но связь "ключзначение" сохраняется:

$arr = array("Name" = "Tommy", "Age" = "34", "Level" = "15"); asort($arr);

print_r($arr); echo "
"; arsort($arr); print_r($arr);

?

Теперь давайте рассмотрим функции сортировки по ключам ассоциативных массивов: ksort() и krsort():

$arr = array("Name" = "Tommy", "Age" = "34", "Level" = "15"); ksort($arr);

print_r($arr); echo "
"; krsort($arr); print_r($arr);

?

Уверен, что здесь всё прозрачно. А если что‐то непонятно, то запустите скрипт, и проанализируйте результат.

И, напоследок, рассмотрим функции пользовательской сортировки: uasort() и uksort(). Обе функции принимают два параметра: массив и пользовательскую функцию сортировки. Функция сортирует массив по значениям, а функция uksort() сортирует массив по ключам. В качестве примера рассмотрим такой скрипт:

function cmp($x, $y) { if ($x == $y) return 0; if ($x == 1) return 1;

if ($y == 1) return -1; if ($x $y) return 1; else return -1;

}

$arr = array("A" = 1, "C" = 3, "B" = 2);

uasort($arr, "cmp"); print_r($arr);

echo "
"; uksort($arr, "cmp"); print_r($arr);

?

Как видите, мы написали свои правила сортировки, по которым число "1" всегда больше любого другого значения. Если ни одно из чисел не является "1", то тогда сравниваем по обычным правилам. Таким образом, PHP сортирует наш массив по правилам, описанным в функции сравнения, название которой мы передали в функциях uasort() и uksort().

Вот и все основные функции для различных манипуляций с массивами. Разумеется, это далеко не все, которые сделали для нас разработчики, но эти функции действительно важные, и на практике применяются регулярно.

Оборудование, материалы

Персональный компьютер с установленной ОС. Текстовый редактор Notepad++ или аналогичный. Open Server.

Порядок выполнения задания Примеры решения задач

Задача 1. Создайте массив, заполненный числами от 1 до 100. Найдите сумму элементов данного массива.

Решение: для начала создадим массив с числами от 1 до 100. Вручную это сделать будет очень сложно, поэтому воспользуемся функцией range:

$arr = range(1, 100);

?

Сумму элементов полученного массива найдем с помощью функции array_sum (можно использовать цикл foreach, как мы это делали раньше, но array_sum в данном случае гораздо удобнее и проще):

//Найдем сумму элементов нашего массива: echo array_sum(range(1, 100));

?

Задача 2. Функция array_map

Задача. Дан массив с элементами 'a', 'b', 'c', 'd', 'e'. С помощью функции array_map сделайте из него массив 'A', 'B', 'C', 'D', 'E'.

Решение: с помощью функции array_map задача решается в одну строчку ‐ первым параметром передадим ей функцию strtoupper, а вторым ‐ массив, к каждому элементу которого мы хотим применить strtoupper:

$arr = ['a', 'b', 'c', 'd', 'e'];

$arr = array_map('strtoupper', $arr); var_dump($arr);

?

Задачи для решения Работа с count

Для решения задач данного блока вам понадобятся следующие функции: count.

  1. Дан массив $arr. Подсчитайте количество элементов этого массива.

  2. Дан массив $arr. С помощью функции count выведите последний элемент данного массива.

Работа с in_array

Для решения задач данного блока вам понадобятся следующие функции: in_array.

  1. Дан массив с числами. Проверьте, что в нем есть элемент со значением 3.

Работа с array_sum и array_product

Для решения задач данного блока вам понадобятся следующие функции: array_sum, array_product.

  1. Дан массив [1, 2, 3, 4, 5]. Найдите сумму элементов данного массива.

  2. Дан массив [1, 2, 3, 4, 5]. Найдите произведение (умножение) элементов данного массива.

  3. Дан массив $arr. С помощью функций array_sum и count найдите среднее арифметическое элементов (сумма элементов делить на их количество) данного массива.

Работа с range

Для решения задач данного блока вам понадобятся следующие функции: range.

  1. Создайте массив, заполненный числами от 1 до 100.

  2. Создайте массив, заполненный буквами от 'a' до 'z'.

  3. Создайте строку '123456789' не используя цикл.

  4. Найдите сумму чисел от 1 до 100 не используя цикл.

  5. Найдите произведение чисел от 1 до 10 не используя цикл.

Работа с array_merge

Для решения задач данного блока вам понадобятся следующие функции: array_merge.

  1. Даны два массива: первый с элементами 1, 2, 3, второй с элементами 'a', 'b', 'c'. Сделайте из них массив с элементами 1, 2, 3, 'a', 'b', 'c'.

Работа с array_slice

Для решения задач данного блока вам понадобятся следующие функции: array_slice.

  1. Дан массив с элементами 1, 2, 3, 4, 5. С помощью функции array_slice создайте из него массив $result с элементами 2, 3, 4.

Работа с array_splice

Для решения задач данного блока вам понадобятся следующие функции: array_splice.

  1. Дан массив [1, 2, 3, 4, 5]. С помощью функции array_splice преобразуйте массив в [1, 4, 5].

  2. Дан массив [1, 2, 3, 4, 5]. С помощью функции array_splice запишите в новый массив элементы [2, 3, 4].

  3. Дан массив [1, 2, 3, 4, 5]. С помощью функции array_splice сделайте из него массив [1, 2, 3, 'a', 'b', 'c', 4, 5].

  4. Дан массив [1, 2, 3, 4, 5]. С помощью функции array_splice сделайте из него массив [1, 'a', 'b', 2, 3, 4, 'c', 5, 'e'].

Работа с array_keys, array_values, array_combine

Для решения задач данного блока вам понадобятся следующие функции: array_keys, array_values, array_combine.

  1. Дан массив 'a'=1, 'b'=2, 'c'=3'. Запишите в массив $keys ключи из этого массива, а в $values

– значения.

  1. Даны два массива: ['a', 'b', 'c'] и [1, 2, 3]. Создайте с их помощью массив 'a'=1, 'b'=2, 'c'=3'.

Работа с array_flip, array_reverse

Для решения задач данного блока вам понадобятся следующие функции: array_flip, array_reverse.

  1. Дан массив 'a'=1, 'b'=2, 'c'=3. Поменяйте в нем местами ключи и значения.

  2. Дан массив с элементами 1, 2, 3, 4, 5. Сделайте из него массив с элементами 5, 4, 3, 2, 1.

Работа с array_search

Для решения задач данного блока вам понадобятся следующие функции: array_search.

  1. Дан массив ['a', '‐', 'b', '‐', 'c', '‐', 'd']. Найдите позицию первого элемента '‐'.

  2. Дан массив ['a', '‐', 'b', '‐', 'c', '‐', 'd']. Найдите позицию первого элемента '‐' и удалите его с помощью функции array_splice.

Работа с array_replace

Для решения задач данного блока вам понадобятся следующие функции: array_replace.

  1. Дан массив ['a', 'b', 'c', 'd', 'e']. Поменяйте элемент с ключом 0 на '!', а элемент с ключом 3 ‐ на '!!'.

Работа с сортировку

Для решения задач данного блока вам понадобятся следующие функции: функции для сортировки,

  1. Дан массив '3'='a', '1'='c', '2'='e', '4'='b'. Попробуйте на нем различные типы сортировок.

Работа с array_rand

Для решения задач данного блока вам понадобятся следующие функции: array_rand.

  1. Дан массив с элементами 'a'=1, 'b'=2, 'c'=3. Выведите на экран случайный ключ из данного массива.

  2. Дан массив с элементами 'a'=1, 'b'=2, 'c'=3. Выведите на экран случайный элемент данного массива.

Работа с shuffle

Для решения задач данного блока вам понадобятся следующие функции: shuffle.

  1. Дан массив $arr. Перемешайте его элементы в случайном порядке.

  2. Заполните массив числами от 1 до 25 с помощью range, а затем перемешайте его элементы в случайном порядке.

  3. Создайте массив, заполненный буквами от 'a' до 'z' так, чтобы буквы шли в случайном порядке и не повторялись.

  4. Сделайте строку длиной 6 символов, состоящую из маленьких английских букв, расположенных в случайном порядке. Буквы не должны повторяться.

Работа с array_unique

Для решения задач данного блока вам понадобятся следующие функции: array_unique.

  1. Дан массив с элементами 'a', 'b', 'c', 'b', 'a'. Удалите из него повторяющиеся элементы.

Работа с array_shift, array_pop, array_unshift, array_push

Для решения задач данного блока вам понадобятся следующие функции: array_shift, array_pop, array_unshift, array_push.

  1. Дан массив с элементами 1, 2, 3, 4, 5. Выведите на экран его первый и последний элемент, причем так, чтобы в исходном массиве они исчезли.

  2. Дан массив с элементами 1, 2, 3, 4, 5. Добавьте ему в начало элемент 0, а в конец ‐ элемент 6.

  3. Дан массив с элементами 1, 2, 3, 4, 5, 6, 7, 8. С помощью цикла и функций array_shift и array_pop выведите на экран его элементы в следующем порядке: 18273645.

Работа с array_pad, array_fill, array_fill_keys, array_chunk

Для решения задач данного блока вам понадобятся следующие функции: array_pad, array_fill, array_fill_keys, array_chunk.

  1. Дан массив с элементами 'a', 'b', 'c'. Сделайте из него массив с элементами 'a', 'b', 'c', '', '', ''.

  2. Заполните массив 10‐ю буквами 'x'.

  3. Создайте массив, заполненный целыми числами от 1 до 20. С помощью функции array_chunk разбейте этот массив на 5 подмассивов ([1, 2, 3, 4]; [5, 6, 7, 8] и т.д.).

Работа с array_count_values

Для решения задач данного блока вам понадобятся следующие функции: array_count_values.

  1. Дан массив с элементами 'a', 'b', 'c', 'b', 'a'. Подсчитайте сколько раз встречается каждая из букв.

Работа с array_map

Для решения задач данного блока вам понадобятся следующие функции: array_map.

  1. Дан массив с элементами 1, 2, 3, 4, 5. Создайте новый массив, в котором будут лежать квадратные корни данных элементов.

  2. Дан массив с элементами 'php', 'html'. Создайте новый массив, в котором из элементов будут удалены теги.

  3. Дан массив с элементами ' a ', ' b ', ' с '. Создайте новый массив, в котором будут данные элементы без концевых пробелов.

Работа с array_intersect, array_diff

Для решения задач данного блока вам понадобятся следующие функции: array_intersect, array_diff.

  1. Дан массив с элементами 1, 2, 3, 4, 5 и массив с элементами 3, 4, 5, 6, 7. Запишите в новый массив элементы, которые есть и в том, и в другом массиве.

  2. Дан массив с элементами 1, 2, 3, 4, 5 и массив с элементами 3, 4, 5, 6, 7. Запишите в новый массив элементы, которые не присутствуют в обоих массивах одновременно.

Задачи
  1. Дана строка '1234567890'. Найдите сумму цифр из этой строки не используя цикл.

  2. Создайте массив ['a'=1, 'b'=2... 'z'=26] не используя цикл.

  3. Создайте массив вида [[1, 2, 3], [4, 5, 6], [7, 8, 9]] не используя цикл.

  4. Дан массив с элементами 1, 2, 4, 5, 5. Найдите второй по величине элемент. В нашем случае это будет 4.

Ресурсы и ссылки

http://code.mu/tasks/php/base/rabotasfunkciyamidlyamassivovvphp.html

http://code.mu/books/php/base/rabotasfunkciyamidlyamassivovvphp.html