Урок 7. Функции для массивов в PHP
Теория
Методы и функции: count, in_array, array_sum, array_product, range, array_merge, array_merge_recursive, array_slice, array_splice, array_keys, array_values, array_combine, array_flip, array_reverse, array_search, array_replace, array_count_values, функции для сортировки, array_rand, shuffle, array_unique, array_shift, array_pop, array_unshift, array_push, array_pad, array_fill, array_fill_keys, array_chunk, array_count_values, array_intersect, array_diff, array_map
Функция count
Функция count подсчитывает количество элементов массива.
Синтаксис: count(массив).
Пример
Функция вернет количество элементов массива:
<?$a=['a','b','c','d'];echo count($a)?>
4.
Функция in_array
Функция in_array проверяет наличие заданного элемента в массиве.
Синтаксис: in_array(что искать,в каком массиве). Если элемент есть, то результат будет 1, если нет, - пусто (true, falshe(?)).
Пример
Проверить, есть ли в массиве $a элемент со значением 3:
<?$a=[1,2,3,4,5];echo in_array(3,$a)?>
1.
<?$a=[1,2,3,4,5,3,3,3];echo in_array(3,$a)?>
1.
<?$a=[1,2,3,4,5];echo in_array(8,$a)?>
.
Функция array_sum
Функция array_sum вычисляет сумму элементов массива.
Синтаксис: array_sum(массив).
Пример
Найти сумму элементов массива:
<?$a=[1,2,3,4,5];echo array_sum($a)?>
15.
Пример
Найти сумму цифр числа. Для этого разобьем число в массив с помощью str_split и сложим элементы этого массива с помощью array_sum:
<?$n=12345;echo array_sum(str_split($n,1))?>
15.
Функция array_product
Функция array_product вычисляет произведение элементов массива (умножает).
Синтаксис: array_product(массив).
Пример
Найти произведение элементов массива:
<?$a=[1,2,3,4,5];echo array_product($a)?>
120.
Функция range
Функция range создает массив с диапазоном элементов. К примеру, можно создать массив, заполненный числами от 1 до 100 или буквами от 'a' до 'z'. Диапазон, который сгенерирует функция, задается параметрами: 1-й параметр откуда генерировать, а 2-й - докуда.
3-й необязательный параметр функции задает шаг. К примеру, можно сделать ряд 1,3,5,7, если задать шаг 2, или ряд 1,4,7,10 если задать шаг 3.
Синтаксис: range(откуда,докуда,[шаг]).
Пример
Создать массив, заполненный числами от 1 до 5:
<?$a=range(1,5);print_r($a)?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
Пример
Создать массив, заполненный числами от 5 до 1:
<?$a=range(5,1);print_r($a)?>
Array ( [0] => 5 [1] => 4 [2] => 3 [3] => 2 [4] => 1 )
Пример
Создать массив, заполненный числами от 0 до 10 c шагом 2:
<?$a=range(0,10,2);print_r($a)?>
Array ( [0] => 0 [1] => 2 [2] => 4 [3] => 6 [4] => 8 [5] => 10 )
Пример
Создать массив, заполненный буквами от 'a' до 'e':
<?$a=range('a','e');print_r($a)?>
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )
Функция array_merge
Функция array_merge сливает 2 и более массива вместе.
Если в сливаемых массивах встречаются одинаковые ключи, останется только 1 из таких элементов. Если нужно, чтобы остались все элементы с одинаковыми ключами, используйте функцию array_merge_recursive.
ПРОВЕРЬ!!!
Синтаксис: array_merge(1 массив,2 массив,…).
Пример
Функция слила массивы:
<?$a=[1,2,3];$b=['a','b','c'];$r=array_merge($a,$b);print_r($r)?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => a [4] => b [5] => c ) .
<?$a=[1,2,3];$b=[1,'b','c'];$r=array_merge($a,$b);print_r($r)?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 1 [4] => b [5] => c ) .
Функция array_merge_recursive
Функция array_merge_recursive сливает 2 и более массива вместе.
Отличие от функции array_merge проявляется тогда, когда в сливаемых массивах есть одинаковые ключи. В этом случае array_merge_recursive оставляет оба ключа.
Синтаксис: array_merge_recursive(1 массив,2 массив,…).
Пример
В данном примере 2 массива слились вместе с помощью array_merge_recursive.
Обратите внимание на то, что станет с элементами с одинаковыми ключами 'www':
<?$a=['www'=>'a','b','c'];$b=['www'=>1,2,3];$r=array_merge_recursive($a,$b);print_r($r)?>
Array ( [www] => Array ( [0] => a [1] => 1 ) [0] => b [1] => c [2] => 2 [3] => 3 ) .
Для сравнения смотрите, как сработает функция array_merge - останется только последний элемент:
<?$a=['www'=>'a','b','c'];$b=['www'=>1,2,3];$r=array_merge($a,$b);print_r($r)?>
Array ( [www] => 1 [0] => b [1] => c [2] => 2 [3] => 3 ) .
Функция array_slice
Функция array_slice отрезает и возвращает часть массива. При этом сам массив не меняется. 1-м параметром указывается массив для разрезания. 2-м параметром указывается, с какого элемента начинать отрезание, а 3-м - сколько элементов отрезать. 3-й параметр может быть отрицательным, в этом случае отсчет начнется с конца (-1 - последний элемент, -2 - предпоследний и так далее). 3-й параметр можно вообще не указывать, в этом случае массив отрежется до самого конца.
Последний необязательный параметр регулирует, сохранять ли ключи при отрезании (true - сохранять, false (по умолчанию) - не сохранять)(? И так сохраняет. PHP5).
Синтаксис: array_slice(массив,откуда отрезать,[сколько],[сохранять ключи=false]).
Напоминаем: элементы массива считаются с 0.
Пример
Вырезать 3 элемента с 0-го:
<?$a=['a','b','c','d','e'];print_r(array_slice($a,0,3))?>
Array ( [0] => a [1] => b [2] => c ) .
Пример
Вырезать 3 элемента с 1-го:
<?$a=['a','b','c','d','e'];print_r(array_slice($a,1,3))?>
Array ( [0] => b [1] => c [2] => d ) .
Пример
Вырезать элементы с 1-го до конца массива. Для этого 3-й параметр не пишем:
<?$a=['a','b','c','d','e'];print_r(array_slice($a,1))?>
Array ( [0] => b [1] => c [2] => d [3] => e ) .
Пример
Вырезать элементы с предпоследнего, 2 штуки. Для этого 2-й параметр установим в -2 (позиция предпоследнего элемента):
<?$a=['a','b','c','d','e'];print_r(array_slice($a,-2,2))?>
Array ( [0] => d [1] => e ) .
Пример
По умолчанию массив не сохраняет(?) ключи при вырезании:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];print_r(array_slice($a,0,3))?>
Array ( [a] => 1 [b] => 2 [c] => 3 ) .
Сохраняет. PHP5!
Пример
Сделать так, чтобы ключи сохранялись(?). Для этого последний параметр установим как true:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];print_r(array_slice($a,0,3,true))?>
Array ( [a] => 1 [b] => 2 [c] => 3 ) .
И без true сохраняет. PHP5!
Функция array_splice
Функция array_splice отрезает и возвращает часть массива. При этом отрезанная часть исчезает из массива.
Вместо отрезанной части можно вставлять новые элементы.
1-м параметром указывается массив для разрезания. 2-м параметром указывается, с какого элемента начинать отрезание, а 3-м - сколько элементов отрезать. 3-й параметр может быть отрицательным, в этом случае отсчет начнется с конца (-1 - последний элемент, -2 - предпоследний и так далее). 3-й параметр можно вообще не указывать, в этом случае массив отрежется до самого конца.
В последнем необязательным параметре можно задавать массив элементов, которые будут вставлены взамен удаленных.
Синтаксис: array_splice(массив,откуда отрезать,[сколько],[вставить взамен]).
Напоминаем: элементы массива считаются с 0.
Пример
Вырезать 3 элемента с 0-го:
<?$a=['a','b','c','d','e'];print_r(array_splice($a,0,3))?>
Array ( [0] => a [1] => b [2] => c ) .
При этом массив $a примет следующий вид:
Array ( [0] => d [1] => e ) .
Пример
Вырезать 3 элемента с 1-го:
<?$a=['a','b','c','d','e'];print_r(array_splice($a,1,3))?>
Array ( [0] => b [1] => c [2] => d ) .
При этом массив $a примет следующий вид:
Array ( [0] => a [1] => e ) .
Пример
Вырезать элементы с 1-го до конца массива. Для этого 3-й параметр не пишем:
<?$a=['a','b','c','d','e'];print_r(array_splice($a,1))?>
Array ( [0] => b [1] => c [2] => d [3] => e ) .
При этом массив $a примет следующий вид:
Array ( [0] => a ) .
Пример
Вырезать 2 элемента с предпоследнего. Для этого 2-й параметр установим в -2 (позиция предпоследнего элемента):
<?$a=['a','b','c','d','e'];print_r(array_splice($a,-2,2))?>
Array ( [0] => d [1] => e ) .
При этом массив $a примет следующий вид:
Array ( [0] => a [1] => b [2] => c ) .
Пример
Вырезать 2 элемента с 1-го, а в замен вставить элементы 1,2,3:
<?$a=['a','b','c','d','e'];print_r(array_splice($a,1,2,[1,2,3]))?>
Array ( [0] => b [1] => c ) .
При этом массив $a примет следующий вид:
Array ( [0] => a [1] => 1 [2] => 2 [3] => 3 [4] => d [5] => e ) .
Пример
Ничего не вырезаем, а просто вставим элементы 1,2,3 начиная с позиции 1. Для этого 3-й параметр ставится в 0:
<?$a=['a','b','c','d','e'];print_r(array_splice($a,1,0,[1,2,3]))?>
Array ( ) .
Результат выполнения кода: [].
При этом массив $a примет следующий вид:
Array ( [0] => a [1] => 1 [2] => 2 [3] => 3 [4] => b [5] => c [6] => d [7] => e ) .
Функция array_keys
Функция array_keys получает ключи массива и записывает их в новый массив.
Синтаксис: array_keys(массив).
Пример
Функция получила ключи из массива:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];print_r(array_keys($a))?>
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e ) .
Функция array_values
Функция array_values выбирает все значения из массива.
Синтаксис: array_values(массив).
Пример
Получить все значения массива:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];print_r(array_values($a))?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) .
Функция array_combine
Функция array_combine осуществляет слияние двух массивов в 1 ассоциативный.
1-м параметром функция принимает массив будущих ключей, а 2-м - массив будущих значений.
Синтаксис: array_combine(массив ключей,массив значений).
Пример
Функция сольет 2 массива в 1 ассоциативный. При этом соответствующие элементы из 1-го массива станут ключами элементов из 2-го массива:
<?$k=['green','blue','red'];$e=['зеленый','голубой','красный'];$a=array_combine($k,$e);print_r($a)?>
Array ( [green] => зеленый [blue] => голубой [red] => красный ) .
Функция array_flip
Функция array_flip производит обмен местами ключей и значений массива.
Синтаксис: array_flip(массив).
Пример
Поменять местами ключи и значения массива:
<?$a=['a'=>1,'b'=>2,'c'=>3];$r=array_flip($a);print_r($r)?>
Array ( [1] => a [2] => b [3] => c ) .
Функция array_reverse
Функция array_reverse переворачивает массив в обратном порядке.
1-м параметром передается массив, а 2-м - сохранять ключи при перестановке элементов или нет (true - да, false - нет).
2-й параметр указывать необязательно. В таком случае по умолчанию 2-м параметром является false.
Синтаксис: array_reverse(массив,[сохранять ли ключи]).
Пример
Перевернуть массив:
<?$a=[1,2,3,4,5];$a=array_reverse($a);print_r($a)?>
Array ( [0] => 5 [1] => 4 [2] => 3 [3] => 2 [4] => 1 ) .
Пример
Учтите, что по умолчанию ключи оторвутся от элементов:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];$a=array_reverse($a);print_r($a)?>
Array ( [e] => 5 [d] => 4 [c] => 3 [b] => 2 [a] => 1 ) .
Ничего не отрывается. PHP5.
Пример
Чтобы ключи переворачивались вместе с массивом, нужно передать 2-й параметр:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];$a=array_reverse($a,true);print_r($a)?>
Array ( [e] => 5 [d] => 4 [c] => 3 [b] => 2 [a] => 1 ) .
И без 2-го параметра всё переворачивается, как надо (ничего не отрывается). PHP5.
Функция array_search
Функция array_search осуществляет поиск значения в массиве и возвращает ключ 1-го найденного элемента. Если такой элемент не найдет - вернет false. 3-й параметр задает строгое сравнение по типу (как по ===). Если поставить true, он будет сравнивать строго, а если false (по умолчанию), - то нет.
Синтаксис: array_search(что ищем,где ищем,[сравнивать по типу=false]).
Пример
Найти в массиве элемент со значением 'c', в результате получить его ключ (он равен 2, отсчет с 0):
<?$a=['a','b','c','d','e'];echo array_search('c',$a)?>
2.
Функция array_replace
Функция array_replace заменяет значения 1-го массива значениями с такими же ключами из других переданных массивов. Если ключ из 1-го массива присутствует во 2-м массиве, его значение заменяется на значение из 2-го массива. Если ключ есть во 2-м массиве, но отсутствует в 1-м, - он будет создан в 1-м массиве. Если ключ присутствует только в 1-м массиве, то сохранится как есть.
Если для замены передано несколько массивов, они будут обработаны в порядке передачи и более поздние массивы будут перезаписывать значения из предыдущих.
Синтаксис: array_replace(массив,массив,массив,…).
Пример
Заменить элемент с ключом 0 на '!', а элемент с ключом 2 - на '!!':
<?$a=['a','b','c','d','e'];$r=array_replace($a,[0=>'!',2=>'!!']);print_r($r)?>
Array ( [0] => ! [1] => b [2] => !! [3] => d [4] => e ) .
Функция array_count_values
Функция array_count_values производит подсчет количества всех значений массива. Возвращает ассоциативный массив, в котором ключами будут элементы массива, а значениями - их количество в массиве.
Синтаксис: array_count_values(массив).
Пример
Подсчитаем, сколько раз встречается каждый из элементов:
<?$a=['a','a','a','b','b','c'];print_r(array_count_values($a))?>
Array ( [a] => 3 [b] => 2 [c] => 1 ) .
Сортировка массивов
Для сортировки массивов в PHP существует несколько функций: sort - по возрастанию элементов, rsort - по убыванию элементов, asort - по возрастанию элементов с сохранением ключей, arsort - по убыванию элементов с сохранением ключей, ksort - по возрастанию ключей, krsort - по убыванию ключей, usort - по функции по элементам, uasort - по функции по элементам с сохранением ключей, uksort - по функции по ключам, natsort - натуральная сортировка.
Все эти функции изменяют сам массив - это значит, что результат не нужно никуда присваивать: поменяется сам массив.
Синтаксис: sort(массив).
Пример
В данном примере функция отсортирует массив по возрастанию элементов:
<?$a=[1,3,2,5,4];sort($a);print_r($a)?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) .
Функция array_rand
Функция array_rand возвращает случайный ключ из массива.
2-й необязательный параметр указывает, сколько случайных ключей следует вернуть. Если он не указан, возвращается 1 ключ, а если указан - заданное количество ключей в виде массива.
Синтаксис: array_rand(массив,[сколько ключей выбрать]).
Пример
Функция вернет случайный ключ из массива:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];$k=array_rand($a);print_r($k)?>
d.
Пример
Вернуть случайный элемент из массива, зная случайный ключ:
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];$k=array_rand($a);print_r($a[$k])?>
5.
Пример
Задать 2-й параметр и теперь функция вернет массив из 3-х случайных ключей (3 ключа - так как 2-й параметр равен 3):
<?$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];$k=array_rand($a,3);print_r($k)?>
Array ( [0] => a [1] => c [2] => d ) .
Функция shuffle
ПРОВЕРЬ!!!Функция array_unique
Функция array_unique осуществляет удаление повторяющихся элементов (дублей) из массива.
Синтаксис: array_unique(массив).
Пример
Удалить дубли из массива:
<?$a=[1,1,1,2,2,3];$a=array_unique($a);print_r($a)?>
Array ( [0] => 1 [3] => 2 [5] => 3 ) .
Функция array_shift
Функция array_shift вырезает и возвращает 1-й элемент массива. При этом этот элемент исчезает из массива.
Синтаксис: array_shift(массив).
Пример
В данном примере функция вырезала 1-й элемент массива:
<?$a=[1,2,3,4,5];echo array_shift($a)?>
1.
Массив $a станет выглядеть так: Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 ) .
Функция array_pop
Функция array_pop вырезает и возвращает последний элемент массива. При этом этот элемент исчезает из массива.
Синтаксис: array_pop(массив).
Пример
В данном примере функция вырезала и вернула последний элемент массива:
<?$a=[1,2,3,4,5];echo array_pop($a)?>
5.
Массив $a станет выглядеть так: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) .
Функция array_unshift
Функция array_unshift добавляет элементы в начало массива.
Функция изменяет переданный массив, возвращает новое количество элементов в массиве.
Синтаксис: array_unshift(массив,какие элементы добавить).
Пример
Добавить в массив еще 2 элемента:
<?$a=[1,2,3];$n=array_unshift($a,'a','b');print_r($a);echo'<p>'.$n?>
Array ( [0] => a [1] => b [2] => 1 [3] => 2 [4] => 3 )
5.
В переменной $n будет лежать новое количество элементов массива: 5.
Функция array_push
Функция array_push добавляет элементы в конец массива.
Функция изменяет переданный массив, возвращает новое количество элементов в массиве.
Синтаксис: array_push(массив,какие элементы добавить).
Пример
Добавить элементы в конец массива:
<?$a=[1,2,3];$n=array_push($a,4,5);print_r($a);echo'<p>'.$n?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
5.
В переменной $n будет лежать новое количество элементов массива: 5.
Функция array_pad
Функция array_pad дополняет массив определенным значением до заданного размера.
Синтаксис: array_pad(массив,до какого размера заполнить,чем заполнять).
2-й параметр можно делать отрицательным, в этом случае массив будет дополнятся элементами не с конца, а с начала.
Пример
Заполнить массив нулями так, чтобы его размер стал 5 элементов (дополнить нулями с 3 элементов до 5):
<?$a=[1,2,3];$a=array_pad($a,5,0);print_r($a)?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 0 [4] => 0 ) .
Пример
А теперь в массиве уже есть 5 элементов, поэтому он ничем не заполнится:
<?$a=[1,2,3,4,5,6];$a=array_pad($a,5,0);print_r($a)?>
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) .
Пример
Сделать 2-й параметр отрицательным. В этом случае массив заполнится сначала, а не с конца:
<?$a=[1,2,3];$a=array_pad($a,-5,0);print_r($a)?>
Array ( [0] => 0 [1] => 0 [2] => 1 [3] => 2 [4] => 3 ) .
Функция array_fill
Функция array_fill создает массив, заполненный элементами с определенным значением.
Синтаксис: array_fill(ключ 1-го элемента,сколько элементов,чем заполнять).
Пример
Заполнить массив 5-ю элементами с текстом 'x'. Так как 1-й параметр 0, то ключи начнут свою нумерацию с 0:
<?$a=array_fill(0,5,'x');print_r($a)?>
Array ( [0] => x [1] => x [2] => x [3] => x [4] => x )
Пример
Заполнить массив 5-ю элементами с текстом 'x'. Так как 1-й параметр 3, то ключи начнут свою нумерацию с 3:
<?$a=array_fill(3,5,'x');print_r($a)?>
Array ( [3] => x [4] => x [5] => x [6] => x [7] => x ) .
Пример
Сделать массив [['x','x','x'],['x','x','x'],['x','x','x']]:
<?$a=array_fill(0,3,array_fill(0,5,'x'));print_r($a)?>
Array ( [0] => Array ( [0] => x [1] => x [2] => x [3] => x [4] => x ) [1] => Array ( [0] => x [1] => x [2] => x [3] => x [4] => x ) [2] => Array ( [0] => x [1] => x [2] => x [3] => x [4] => x ) ) .
Пример
Сделать массив [['x','x','x'],['x','x','x'],['x','x','x']]:
<?$a=array_fill(1,3,array_fill(1,5,'x'));print_r($a)?>
Array ( [1] => Array ( [1] => x [2] => x [3] => x [4] => x [5] => x ) [2] => Array ( [1] => x [2] => x [3] => x [4] => x [5] => x ) [3] => Array ( [1] => x [2] => x [3] => x [4] => x [5] => x ) ) .
Функция array_fill_keys
Функция array_fill_keys создает массив и заполняет массив элементами с определенным значением так, чтобы весь массив был с одинаковыми элементами, но разными ключами. Ключи берутся из массива, передаваемого 1-м параметром.
Синтаксис: array_fill_keys(ключ 1-го элемента,чем заполнять).
Пример
Заполнить массив 5-ю элементами с текстом 'x' с ключами из массива ['a','b','c','d','e']:
<?$a=array_fill_keys(['a','b','c','d','e'],'x');print_r($a)?>
Array ( [a] => x [b] => x [c] => x [d] => x [e] => x ) .
Пример
<?$k=array(1,5,10,'b');$a=array_fill_keys($keys,'x');print_r($a)?>
Array ( [1] => x [5] => x [10] => x [b] => x ) .
Функция array_chunk
Функция array_chunk разбивает 1-мерный массив в 2-мерный. 1-м параметром она принимает массив, а 2-м - количество элементов в каждом подмассиве.
Синтаксис: array_chunk(массив,по сколько элементов).
Пример
Разбить массив по 2 элемента в подмассиве:
<?$a=['a','b','c','d'];print_r(array_chunk($a,2))?>
Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) ) .
Результат: [['a','b'],['c','d']].
Пример
Разбить массив по 3 элемента в подмассиве. Обратите внимание на то, что в последнем подмассиве 2 элемента, а не 3, так как ему не хватило элементов:
<?$a=['a','b','c','d','e'];print_r(array_chunk($a,3))?>
Array ( [0] => Array ( [0] => a [1] => b [2] => c ) [1] => Array ( [0] => d [1] => e ) ) .
Результат: [['a','b','c'],['d','e']].
Функция array_count_values
Функция array_count_values производит подсчет количества всех значений массива. Возвращает ассоциативный массив, в котором ключами будут элементы массива, а значениями - их количество в массиве.
Синтаксис: array_count_values(массив).
Пример
Подсчитаем, сколько раз встречается каждый из элементов:
<?$a=['a','a','a','b','b','c'];print_r(array_count_values($a))?>
Array ( [a] => 3 [b] => 2 [c] => 1 ) .
Функция array_intersect
Функция array_intersect вычисляет пересечение массивов, возвращает массив из элементов, которые есть во всех массивах, переданных в функцию.
Синтаксис: array_intersect(массив,массив,массив,…).
Пример
Найти, какие элементы есть и в 1-м, и во 2-м массиве:
<?$a=array(1,2,3,4,5);$b=array(3,4,5,6,7);$r=array_intersect($a,$b);print_r($r)?>
Array ( [2] => 3 [3] => 4 [4] => 5 ) .
<?$a=array(1,2,3,4,5);$b=array(3,4,5,6,7);$r=array_intersect($b,$a);print_r($r)?>
Array ( [0] => 3 [1] => 4 [2] => 5 ) .
Функция array_diff
Функция array_diff возвращает массив из элементов, которые не являются общими для всех массивов, переданных в функцию.
Синтаксис: array_diff(массив,массив,массив,…).
Пример
Найти, какие элементы есть в 1-м массиве и при этом отсутствуют во 2-м:
<?$a=array(1,2,3,4,5);$b=array(3,4,5,6,7);$r=array_intersect($a,$b);print_r($r)?>
Array ( [0] => 1 [1] => 2 ) .
<?$a=array(1,2,3,4,5);$b=array(3,4,5,6,7);$r=array_intersect($b,$a);print_r($r)?>
Array ( [3] => 6 [4] => 7 ) .
Функция array_map
Функция array_map применяет заданную функцию ко всем элементам массива и возвращает измененный массив.
1-м параметром функция принимает имя функции, а 2-м - массив. Можно передавать дополнительные массивы 3-м и так далее параметрами.
Синтаксис: array_map(имя функции в кавычках,массив,[еще массивы через запятую]).
Пример
В данном примере функция array_map извлекла квадратный корень из каждого элемента массива с помощью функции sqrt и записала в новый массив:
<?$a=[1,4,9];$r=array_map('sqrt',$a);print_r($r)?>
Array ( [0] => 1 [1] => 2 [2] => 3 ) .
Практика
Примеры решения задач
Задача
Создайте массив, заполненный числами от 1 до 100. Найдите сумму элементов данного массива.
Решение: для начала создадим массив с числами от 1 до 100. Вручную это сделать будет очень сложно, поэтому воспользуемся функцией range:
<?$a=range(1,100)?>
Сумму элементов полученного массива найдем с помощью функции array_sum (можно использовать цикл foreach, как мы это делали раньше, но array_sum в данном случае гораздо удобнее и проще):
<?/*Найдем сумму элементов нашего массива:*/echo array_sum(range(1,100))?>
5050
Задача
Функция array_map
Дан массив с элементами 'a','b','c','d','e'. С помощью функции array_map сделайте из него массив 'A','B','C','D','E'.
Решение: с помощью функции array_map задача решается в 1 строчку - 1-м параметром передадим ей функцию strtoupper, а 2-м - массив, к каждому элементу которого мы хотим применить strtoupper:
<?$a=['a','b','c','d','e'];$a=array_map('strtoupper',$a);print_r($a)?>
Array ( [0] => A [1] => B [2] => C [3] => D [4] => E )
Задачи для решения
Работа с count
Дан массив $a. Подсчитайте количество элементов этого массива.
Дан массив $a. С помощью функции count выведите последний элемент данного массива.
Работа с in_array
Дан массив с числами. Проверьте, что в нем есть элемент со значением 3.
Работа с array_sum и array_product
Дан массив [1,2,3,4,5]*. Найдите сумму элементов данного массива.
Дан массив *. Найдите произведение (умножение) элементов данного массива.
Дан массив $arr. С помощью функций array_sum и count найдите среднее арифметическое элементов (сумма элементов делить на их количество) данного массива.
Работа с range
Создайте массив, заполненный числами от 1 до 100.
Создайте массив, заполненный буквами от 'a' до 'z'.
Создайте строку '1-2-3-4-5-6-7-8-9', не используя цикл. Показать подсказку.
Найдите сумму чисел от 1 до 100, не используя цикл.
Найдите произведение чисел от 1 до 10, не используя цикл.
Работа с array_merge
Даны 2 массива: 1-й с элементами 1,2,3, 2-й с элементами 'a','b','c'. Сделайте из них массив с элементами 1,2,3,'a','b','c'.
Работа с array_slice
Дан массив с элементами 1,2,3,4,5. С помощью функции array_slice создайте из него массив $result с элементами 2,3,4.
Работа с array_splice
Дан массив [1,2,3,4,5]*. С помощью функции array_splice преобразуйте массив в [1,4,5].
Дан массив *. С помощью функции array_splice запишите в новый массив элементы [2,3,4].
Дан массив *. С помощью функции array_splice сделайте из него массив [1,2,3,'a','b','c',4,5].
Дан массив *. С помощью функции array_splice сделайте из него массив [1,'a','b',2,3,4,'c',5,'e'].
Работа с array_keys, array_values, array_combine
Дан массив 'a'=>1,'b'=>2,'c'=>3'. Запишите в массив $keys ключи из этого массива, а в $values – значения.
Даны 2 массива: ['a','b','c'] и [1,2,3]. Создайте с их помощью массив 'a'=>1,'b'=>2,'c'=>3'.
Работа с array_flip, array_reverse
Дан массив 'a'=>1,'b'=>2,'c'=>3. Поменяйте в нем местами ключи и значения.
Дан массив с элементами 1,2,3,4,5. Сделайте из него массив с элементами 5,4,3,2,1.
Работа с array_search
Дан массив ['a','-','b','-','c','-','d']*. Найдите позицию 1-го элемента '-'.
Дан массив *. Найдите позицию 1-го элемента '-' и удалите его с помощью функции array_splice.
Работа с array_replace
Дан массив ['a','b','c','d','e']. Поменяйте элемент с ключом 0 на '!', а элемент с ключом 3 - на '!!'.
Работа с сортировкой
Для сортировки массивов в PHP существует несколько функций: sort - по возрастанию элементов, rsort - по убыванию элементов, asort - по возрастанию элементов с сохранением ключей, arsort - по убыванию элементов с сохранением ключей, ksort - по возрастанию ключей, krsort - по убыванию ключей, usort - по функции по элементам, uasort - по функции по элементам с сохранением ключей, uksort - по функции по ключам, natsort - натуральная сортировка. Все эти функции изменяют сам массив. Это значит, что результат не нужно никуда присваивать, поменяется сам массив.
Дан массив '3'=>'a','1'=>'c','2'=>'e','4'=>'b'. Попробуйте на нем различные типы сортировок.
Работа с array_rand
Дан массив с элементами 'a'=>1,'b'=>2,'c'=>3*. Выведите на экран случайный ключ из данного массива.
Дан массив *. Выведите на экран случайный элемент данного массива.
Работа с shuffle
Дан массив $a. Перемешайте его элементы в случайном порядке.
Заполните массив числами от 1 до 25 с помощью range, а затем перемешайте его элементы в случайном порядке.
Создайте массив, заполненный буквами от 'a' до 'z' так, чтобы буквы шли в случайном порядке и не повторялись.
Сделайте строку длиной 6 символов, состоящую из маленьких английских букв, расположенных в случайном порядке. Буквы не должны повторяться.
Работа с array_unique
Дан массив с элементами 'a','b','c','b','a'. Удалите из него повторяющиеся элементы.
Работа с array_shift, array_pop, array_unshift, array_push
Дан массив с элементами 1,2,3,4,5. Выведите на экран его 1-й и последний элемент, причем так, чтобы в исходном массиве они исчезли.
Дан массив с элементами 1,2,3,4,5. Добавьте ему в начало элемент 0, а в конец - элемент 6.
Дан массив с элементами 1,2,3,4,5,6,7,8. С помощью цикла и функций array_shift и array_pop выведите на экран его элементы в следующем порядке: 18273645. Показать решение.
Работа с array_pad, array_fill, array_fill_keys, array_chunk
Дан массив с элементами 'a','b','c'. Сделайте из него массив с элементами 'a','b','c','-','-','-'.
Заполните массив 10-ю буквами 'x'.
Создайте массив, заполненный целыми числами от 1 до 20. С помощью функции array_chunk разбейте этот массив на 5 подмассивов ([1,2,3,4]; [5,6,7,8] и т.д.).
Работа с array_count_values
Дан массив с элементами 'a','b','c','b','a'. Подсчитайте сколько раз встречается каждая из букв.
Работа с array_map
Дан массив с элементами 1,2,3,4,5. Создайте новый массив, в котором будут лежать квадратные корни данных элементов.
Дан массив с элементами 'php','htm'. Создайте новый массив, в котором из элементов будут удалены теги.
Дан массив с элементами ' a ',' b ',' с '. Создайте новый массив, в котором будут данные элементы без концевых пробелов.
Работа с array_intersect, array_diff
Дан массив с элементами 1,2,3,4,5 и массив с элементами 3,4,5,6,7. Запишите в новый массив элементы, которые есть и в том, и в другом массиве.
Дан массив с элементами 1,2,3,4,5 и массив с элементами 3,4,5,6,7. Запишите в новый массив элементы, которые не присутствуют в обоих массивах одновременно.
Задачи
Дана строка '1234567890'. Найдите сумму цифр из этой строки не используя цикл.
Создайте массив ['a'=>1,'b'=>2,…'z'=>26], не используя цикл. Показать подсказку.
Создайте массив вида [[1,2,3],[4,5,6],[7,8,9]], не используя цикл. Показать подсказку.
Дан массив с элементами 1,2,4,5,5. Найдите 2-й по величине элемент (отсчет с 0). В нашем случае это будет 4.