Elettracompany.com

Компьютерный справочник
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Реверс массива php

Website-create.ru

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

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

Работать с ними совершенно не сложно, так что данный пост будет достаточно коротким. Однако, есть и некоторые нюансы, который нужно будет учесть.

Ну что ж, давайте начнем с переворачивания массива.

Переворачивание массива в php

Чтобы перевернуть массив, познакомимся с функцией array_reverse(). После применения данной функции к определенному массиву, мы получим массив, элементы которого будут следовать в обратном порядке относительно исходного массива.

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

Результат, как мы можем видеть из скриншота, именно тот, которого мы и ожидали: последний элемент стал первым, предпоследний – вторым и т.д.

Мы проделали переворачивание с массивом-списком. А как же насчет ассоциативных массивов? Ведь в них значения элемента привязано к ключу!

И ассоциативные массивы можно спокойно переворачивать, при этом их связь с ключом не потеряется.

Давайте рассмотрим это на простом примере.

Из результата выполнения данного кода (скриншот справа) можно видеть, что массив прекрасно перевернулся, но связь элементов с их ключами при этом не потеряна.

Перемешивание массива в php

Также мы можем перемешать элементы массива случайным образом. Для этого существует специальная функция shuffle().

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

Давайте рассмотрим на примерах.

Для начала я перемешаю значения элементов обычного массива-списка:

А вот и результат! Как Вы видите, значения элементов массива расположились в случайном порядке. Причем, если Вы будете обновлять страницу, то результат будет меняться.

Теперь давайте тоже самое проделаем с ассоциативным массивом:

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

Вот об этом нюансе перемешивания, пожалуйста, не забывайте.

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

Добавляйте страничку в закладки, чтобы можно было всегда к ней вернуться и еще раз посмотреть, как работать с массивами. Также читайте другие посты, посвященные массивам php… и не только. Ссылки Вы можете видеть ниже.

Жду Ваших комментариев! Делитесь постом с друзьями при помощи социальных кнопок, которые расположены ниже, а также подписывайтесь на обновления, чтобы всегда быть в курсе новых статей и уроков.

С Вами была Анна Котельникова.

Успехов Вам и до скорых встреч в следующих публикациях!

Читать еще:  Статическое электричество возникновение и способы защиты

Array_reverse


Php функции


Php скрипты


array_reverse

array_reverse — Возвращает массив с элементами в обратном порядке

Описание

array array_reverse ( array array [ , bool preserve_keys ] )

Функция array_reverse() берёт массив array и возвращает новый массив, порядок элементов в котором обратный исходному, сохраняя ключи, если параметр preserve_keys равен TRUE.

Пример 1. Пример использования array_reverse()

Оба массива $r esult и $r esult _keyed содержат одинаковые значения, но обратите внимание на различные ключи. Распечатка $r esult и $r esult _keyed будет:

Замечание: Второй аргумент был добавлен в PHP 4.0.3.

User Contributed Notes

me2resh at gmail dot com
04-Feb-2005 12:25

Here is my version of sorting multidimensional arrays with any key in it even if u want it alphapatically sorted by any key.

u can remove the strtolower part if you want to keep it case sensitive

function cmp( $a , $b ) <
return strcmp (strtolower( $a [ «name» ] ), strtolower ( $b [ «name» ] ));
>
Michiel de Roo
08-Sep-2003 11:55

If you need to reverse an array by reference, you can use the following all.php?act=funct&argument=

message = «now. this works in both» ;
$r a [ 0 ] -> message = «but. does not work in both» ;

zee4speed at hotmail dot com
04-Jul-2003 09:56

another way to ->
If you want to reverse an array with numerical indexes, you can keep them by using following code:

m dot weber at luna-park dot de
31-Jan-2003 06:02

If you want to reverse an array with numerical indexes, you can keep them by using following code:

input is $gruppenarr
output is $gruppenarr 2
nospam dot nass at btinternet dot com dot nospam
13-Jun-2001 05:08

For a similar functionality in PHP3, use something like:

for ( $i = count ( $foo ) — 1 ; $i >= 0; $i — ) <

do something here

. where $foo is the array that you want to reverse.
rahulavhad at yahoo dot com
30-Dec-2000 07:31

This code can help in recursive reversing of the array.

david at audiogalaxy dot com
04-Mar-2000 12:39

As a further clarification: key-value pairs have an order within an array completely separate from whatever the keys happen to be — the order in which you add them. This is the order that functions like each () and next () will move their pointer through the array.
If you add to an array without specifying the key, like $a rr ay [ ] = value; then an internal counter supplies the key value and then the numerical order of your keys will be identical to the the internal order. If you «leave holes» — jumping ahead by specifying a higher number for the key, like $a rr ay [ 1000 ] = value; the internal counter gets pushed forward appropriately. Other than its effect on this internal counter, specifying a numerical key seems no different than specifying a string.
However, some array functions, like array_merge () and array_reverse () treat keys that are numbers differently from keys that are not.
david at audiogalaxy dot com
04-Mar-2000 11:40

Как реверс PHP массив в разделах

У меня есть простой массив, который выглядит следующим образом:Как реверс PHP массив в разделах

Этот массив довольно долго, так что я только включал первые 4 пункта, чтобы дать вам идею.

Читать еще:  Matlab построение графиков по точкам

Моя проблема заключается в том, что мне нужен массив, чтобы быть в формате

На данный момент формат подобен:

Под этим я имею в виду [ «имя»] значение, которое является либо a, b, c, либо d.

Поэтому я каждый 4 элемента в массиве должен быть отменен.

Я попытался достичь этого, но терпеть неудачу каждый раз заканчивая большим количеством для & в то время как петли.

‘array_merge ([], . array_map (‘array_reverse’, array_chunk ($ data, 4)))’ –

Покажите нам, что вы пробовали. –

ответ

Вы можете сделать это с помощью array_chunk , array_merge и array_reverse :

Да. Был написать то же самое 🙂 –

Это дало мне массив, который выглядел как: Array ( [имя] => а [ID] => 8689 ) без больше деталей в – virepo

Пожалуйста, обратите внимание, что я изменил ‘array_slice’ с ‘array_chunk’ –

Вы можете перебирать массив с for и приращения с 4 каждый раз и сохранить текущее смещение в другой переменной и использовать array_slice , чтобы получить текущий срез массива и в обратном порядке, используя array_reverse

Я имею в виду что-то как это:

Все содержимое в течение можно упростить:

Не harcoding каждый 4, реверс на основе полукокса кода name значения

Все ответы здесь, в то время как вполне допустимо, довольно много по порядку O(n^2) . Поэтому я решил, что дам вам O(n/2) , временную сложность, решение в качестве альтернативы, если вы заботитесь о производительности. В решении также используется только O(n + n + k) сложность пространства (на месте обмен).

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

Для решения этой проблемы мы можем обобщить решение как простой массив обратного, что требует простой операции O(n/2) с заменой на месте. Мы можем добиться этого просто двумя счетчиками: $i , начиная с начала массива, и $j , начиная с конца массива. Таким образом, мы можем поменять значения на $arr[$i] на $arr[$j] , а затем увеличивать $i и декремент $j на каждом шаге.

Теперь, чтобы применить более конкретные решения о только реверсе каждую группы из 4 элементов в массиве, мы просто разбить массив в разделах 4-х значений, и только реверс каждый из этих разделов в время. Это просто расширилось на примере выше reverseArray() , изменив начальное и конечное положения счетчика $i и $j только для реверса в каждом разделе.

Таким образом, мы получаем решение O(n/2) , просто добавив еще один цикл для размера раздела и сохраним внутренний цикл из предыдущего примера.

Это будет работать с любым размером массива в любом $partitionSize так это эффективно, если вы пытаетесь сделать это на очень большие массивы.

How to reverse PHP array in partitions

I have a simple array that looks like this:

This array is quite long so I only included the first 4 items to give you an idea.

My problem is that I need the array to be in a format of

At the moment the format is like:

By this I mean the [‘name’] value which is either a,b,c or d.

So I every 4 items in the array need to be reversed.

Читать еще:  Как установить matlab

I have tried to achieve this but fail every time ending up with lots of for & while loops.

Создан 26 сен. 16 2016-09-26 14:10:55 virepo

‘array_merge([], . array_map(‘array_reverse’,array_chunk($data, 4)))’ – Mark Baker 26 сен. 16 2016-09-26 14:18:13

Show us what you have tried. – Magnus Eriksson 26 сен. 16 2016-09-26 14:18:35

4 ответа

You can do it using array_chunk , array_merge and array_reverse :

Создан 26 сен. 16 2016-09-26 14:16:00 Matei Mihai

Yep. Was writing the same thing 🙂 – Can Vural 26 сен. 16 2016-09-26 14:17:17

This gave me an array that looked like : Array ( [name] => a [id] => 8689 ) with no more items in – virepo 26 сен. 16 2016-09-26 14:19:32

Please note that I changed ‘array_slice’ with ‘array_chunk’ – Matei Mihai 26 сен. 16 2016-09-26 14:19:59

works a charm now! 🙂 wish i thought of coding like this. I always go for loops and try to manually create a new array – virepo 26 сен. 16 2016-09-26 14:22:30

You can iterate the array with a for and increment with 4 each time and keep the current offset in other variable and use array_slice to get the current slice of array and reverse order using array_reverse

I am thinking of something like this:

All the content in the for can be simplify to:

Not harcoding every 4, reverse based on char code of name value

Создан 26 сен. 16 2016-09-26 14:26:18 cske

All the answers here, while perfectly valid, are pretty much on the order of O(n^2) . So I figured I’d give you an O(n / 2) , time complexity, solution as an alternative just in case you care about performance. The solution also uses only O(n + n + k) space complexity (in place swap).

Since the requirement is to reverse order of values, I’m ignoring keys and basing the solution on the constraint that the array is always 0-indexed.

To solve this problem, we can generalize the solution as a simple array reverse, which requires a simple O(n/2) operation with in-place swap. We can achieve this simply with two counters, $i starting from the beginning of the array, and $j starting at the end of the array. Thus, we can swap the values at $arr[$i] with that at $arr[$j] and then increment $i and decrement $j , at each step.

Now, to apply the more specific solution of only reverse every group of 4 elements in the array, we just break up the array in partitions of 4 values, and only reverse each of those partitions at a time. Which just expands on the example above of reverseArray() by altering the starting and ending positions of the $i and $j counter to only reverse within each partition.

Thus we arrive the O(n / 2) solution here by just adding another loop for the partition size, and keep the inner loop from the earlier example.

This will work with any array size at any $partitionSize so it’s efficient if you’re trying to do this on very large arrays.

Создан 26 сен. 16 2016-09-26 15:39:45 Sherif

Ссылка на основную публикацию
Adblock
detector