Php как перемешать значения массива

Работа с массивами в PHP

Массив – это тип данных для хранения упорядоченного набора элементов. Каждый элемент в массиве состоит из ключа и значения.

В PHP имеются только упорядоченные ассоциативные массивы. Индексированных массивов в PHP нет.

Но тем не менее в PHP мы можем создавать простые массивы. При указании значений без ключей, они будут им присваиваться автоматически.

Например, создадим массив, который будет содержать среднюю температуру каждого месяца в году:

Здесь мы создали массив $temperatures, содержащий 12 значений. Каждый элемент в этом массиве имеет ключ. Первый элемент имеет в качестве ключа число 0, второй – число 1, и так далее. Последний элемент имеет в качестве ключа число 11.

Другой вариант создания массивов – это использовать функцию array() :

Создание массива без элементов, то есть пустого массива, в PHP выполняется так:

Обращение к значению массива выполняется посредством ключа, который указывается в квадратных скобках:

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

Если мы попытаемся обратиться к элементу, которого нет в массиве, то начиная с PHP 8.0.0, мы получим сообщение об ошибке E_WARNING . При этом в качестве значение будет возвращено null .

Проверить наличия некоторого ключа в массиве можно с помощью функции array_key_exists :

Добавление в массив нового элемента или изменение существующего осуществляется в PHP так:

Здесь мы при добавлении нового элемента в массив не указали ему ключ. В этом случае ключ будет на единицу больше самого большого числового ключа в массиве.

Удаление элемента массива в PHP выполняется с помощью специальной языковой конструкции unset :

С помощью unset вы можете удалить не только отдельный элемент, но и полностью весь массив:

В PHP массиве могут содержаться данные различных типов:

Вывод содержимого массива

Вывести все значения массива на экран можно с помощью функции print_r :

Но чтобы этот вывод был более наглядным лучше это делать внутри тега :

Вывод содержимого массива с помощью функции print_r в PHP

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

Создание ассоциативных массивов в PHP выполняется с указанием ключа. При этом в качестве ключа могут использоваться как числа, так и строки:

 'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese' ]; echo $languages['es']; // 'Spanish' 

При этом в PHP выполняются следующие преобразования при сохранении ключей:

  • строка ‘7’ будет преобразована в число 7 ; но например ключ ’07’ не будет преобразован, так как он не является корректным числом;
  • число 7.5 , то есть число с плавающей точкой ( float ) будет преобразовано к целому числу, в данном случае к 7 ;
  • true к 1 , а false к 0 ;
  • значение null к пустой строке » .
 'a', '095' => 'b', 9.5 => 'c', true => 'd', null => 'e', ]; echo $arr[95]; // a echo $arr['095']; // b echo $arr[9]; // c echo $arr[1]; // d echo $arr['']; // e

Если несколько элементов в объявлении массива используют одинаковый ключ, то последний перезапишет предыдущие:

 'a', '0' => 'b', 0.7 => 'c', false => 'd', ]; echo '
'; print_r($array); echo '

';

Так как в этом примере все ключи преобразуются к 0 , то каждый следующий элемент будет перезаписывать предыдущий и останется в массиве только один ключ со значением ‘d’ .

Массив в PHP, у которого элементы имеют одинаковые ключи

В одном массиве могут содержаться ключи различных типов, то есть одновременно int и string :

Перебор массивов

Наиболее удобный способ прохождения по массиву в PHP – это использовать конструкцию foreach :

 'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; /* $languages – массив, который нужно перебрать $key – значение ключа $value – значение, соответствующее ключу */ echo '
'; foreach ($languages as $key => $value) { echo "Ключ '$key' имеет значение '$value'
"; } echo '

';

Если нужно только по значениям:

foreach ($languages as $value) { echo "$value
"; }

Если ключи массива составляют последовательность, то перебрать такой массив можно с помощью for :

Здесь мы с помощью встроенной функции count() получить длину или другими словами размер массива. Узнать длину массива также можно с помощью sizeof() .

Функцию count также можно использовать для получения последнего элемента массива. Но это повторим только возможно если ключи массива составляют числовую последовательность, начинающуюся с 0 .

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

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

Сортировка

Сортировка массива в порядке возрастания осуществляется с помощью функции sort , в порядке убывания посредством rsort .

Для настройки сортировки можно передать в качестве второго аргумента флаг.

Для того чтобы ключи сохранили значения, с которыми они связаны, сортировку массива необходимо выполнять с помощью функции asort . Функция asort сортирует в порядке возрастания, для сортировки в порядке убывания используйте arsort . Эти функции сортируют массив соответственно как sort и rsort , но ключи в отличие от них остаются связанными с такими же значениями.

Например, выведем с помощью ассоциативного массива $students имя студента и соответствующий полученный им балл в порядке их возрастания:

 47, 'Bob' => 24, 'Tom' => 36, ]; asort($students); echo '
'; print_r($students); echo '

';

Сортировка массива в PHP, у которого ключи сохранили значения, с которыми они связаны

Массивы в PHP можно сортировать не только по значениям, но и ключам. Для этого используется функция ksort . Для ассоциативного массива $students функция ksort выстроит все элементы в порядке возрастания названий ключей.

 47, 'Bob' => 24, 'Tom' => 36, ]; ksort($students); // ['Bob' => 24, 'John' => 47, 'Tom' => 36]

Для сортировки в порядке убывания можно использовать krsort :

 krsort($students); // ['Tom' => 36, 'John' => 47, 'Bob' => 24]

Перемешивание элементов случайным образом

Если вам нужно перемешать элементы в массиве случайным образом, то можно воспользоваться функцией shuffle :

 'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; shuffle($languages); // ['Portuguese', 'French', 'Spanish', 'English'] shuffle($languages); // ['English', 'French', 'Spanish', 'Portuguese']

При этом как вы видите, изначальные ключи теряются и массив превращается в индексируемый.

Выстраивание элементов в обратном порядке

Если вам необходимо создать новый массив, в котором элементы нужно выстроить в обратном порядке, то используйте array_reverse :

 'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; $languagesReverse = array_reverse($languages); echo '
'; print_r($languagesReverse); echo '

';

Создание нового массива в PHP, в котором элементы выстроены в обратном порядке относительно исходного массива

Работа над массивами как с множествами значений

В PHP имеются функции: array_merge , array_intersect и array_diff . Они позволяют работать с массивами как с множествами значений.

1. Объединение одного или несколько массивов вместе выполняется в PHP с помощью функции array_merge :

array_merge(array . $arrays): array

Например, объединим с помощью array_merge элементы 3 массивов вместе:

 'red', 1, 'php', 4]; $array2 = ['price' => 20.8, 1, 'color' => 'green', 3]; $array3 = ['green', 'price' => 30.5, 3, 'php']; $array = array_merge($array1, $array2, $array3); echo '
'; print_r($array); echo '

';

Объединение значений из разных массивов в PHP

Если массивы имеют одинаковые строковые ключи, то более позднее значение этого ключа перезапишет предыдущее. Например, значение ‘green’ ключа ‘color’ перезапишет ‘red’ .

Однако если массивы содержат числовые ключи, то более позднее значение не перезаписывает предыдущее, оно будет просто добавлено в массив. Значения с числовыми ключами в результирующем массиве будут перенумерованы последовательно начиная с нуля.

Функция array_merge , вызванная без аргументов возвращает пустой массив:

2. Функция array_intersect вычисляет пересечения значений основного массива со значениями других массивов:

// $base – основной массив // $arrays – другие массивы array_intersect(array $base, array . $arrays): array

В качестве результата оно возвращает массив со значениями основного массива, которые имеются во всех других массивах.

 'red', 1, 'php', 4]; $array1 = ['price' => 20.8, 1, 'color' => 'red', 3]; $array2 = ['green', 'color' => 'red', 3, 'php', 1]; $result = array_intersect($base, $array1, $array2); // ['color' => red, 0 => 1]

3. Функция array_diff вычисляет разницу между массивами:

// $base – основной массив // $arrays – другие массивы array_diff(array $base, array . $arrays): array

В качестве результата оно возвращает массив со значениями основного массива, которых нет ни в одном из других массивов.

 'red', 1, 'php', 4]; $array1 = [3, 'color' => 'red']; $array2 = [4, 'php']; $result = array_diff($base, $array1, $array2); // [0 => 1]

Проверка наличия ключей и значений в массиве

Проверить имеется ли указанное значение в массиве можно с помощью функции in_array :

if (in_array('apple', $fruits)) { // значение 'apple' имеется в массиве $fruits }

Здесь, в первый аргумент необходимо передать искомое значение, а во второй – сам массив. В качестве результата in_array возвращает true или false .

Кроме in_array в PHP имеется ещё функция array_search . Она выполняет тоже самое, но в отличие от in_array возвращает ключ этого значения.

Если нужно проверить наличие не значения, а ключа, то можно воспользоваться функцией array_key_exists :

if (array_key_exists('es', $languages)) { // ключ 'es' имеется в массиве $languages }

Сериализация

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

Сериализация массива в строку выполняется с помощью функции serialize . Для декодирования строки, содержащей сериализованный массив, обратно в исходный массив используется функция unserialize :

// исходный массив $person = [ 'name' => 'Alexander', 'age' => 23 ]; // сериализуем массив в строковое представление, уникальное для PHP $personString = serialize($person); // выведем на экран строку echo $personString; // 'a:2:{s:4:"name";s:9:"Alexander";s:3:"age";i:23;}' // преобразуем строку обратно в массив $personArray = unserialize($personString); // выведем на экран массив в форматированном виде echo '
'; print_r($personArray); // array('name' => Alexander, 'age' => 23) echo '

';

Многомерные массивы

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

Пример создания двумерного массива:

$software = [ 'os' => ['Windows', 'Linux', 'macOS'], 'browsers' => ['Firefox', 'Chrome', 'Safari', 'Edge'], 'code editors' => ['Visual Studio Code', 'Atom', 'Sublime Text'], ];

По сути двумерный массив – это массив массивов. Обращение к элементу массива в этом случае осуществляется с использованием двух квадратных скобок:

echo $software['os'][0]; // 'Windows' $software['browsers'][3] = 'Opera';

Выведем с помощью функции print_r массив $software в форматированном виде:

echo '
'; print_r($software); echo '

';

Источник

Как перемешать php массив в случайном порядке

В PHP есть встроенная функция shuffle() , которая принимает на вход массив и перемешивает его в случайном порядке. Массив передаётся в функцию по ссылке. Давайте посмотрим на пример. Попробуем дважды перемешать один и тот же массив.

 $collection = ['hexlet', 1, 69, 'awesomeness']; shuffle($collection); print_r($collection); //=> [1, 'hexlet', 'awesomeness', 69] shuffle($collection); print_r($collection); //=> [69, 'awesomeness', 1, 'hexlet'] 

Тут видно, что изменяется сам изначальный массив.

Источник

PHP shuffle() Function

The shuffle() function randomizes the order of the elements in the array.

This function assigns new keys for the elements in the array. Existing keys will be removed (See Example below).

Syntax

Parameter Values

Technical Details

Return Value: Returns TRUE on success or FALSE on failure
PHP Version: 4+
PHP Changelog: PHP 4.2: The random number generator is seeded automatically

More Examples

Example

Randomize the order of the elements in the array:

Unlock Full Access 50% off

COLOR PICKER

colorpicker

Join our Bootcamp!

Report Error

If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:

Thank You For Helping Us!

Your message has been sent to W3Schools.

Top Tutorials
Top References
Top Examples
Get Certified

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Источник

Читайте также:  Python flask get запросы
Оцените статью