Как изменить значения элементов в массиве php

/ 👁 11342

В программировании в целом и при создании сайтов в частности нам все время приходится иметь дело с массивами.

Например, мы получаем данные из базы в виде массива и выводим их на сайт. Также мы можем собирать какие-то данные в массив и в последствии захотеть как-то их модифицировать.

Обычно, чтобы просто вывести данные из массива, достаточно пройтись по нему циклом, например foreach.

Однако, часто бывает так, что данные в массиве нам нужно изменить или как-то обработать.

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

Сегодня рассмотрим, как применить какое-либо действие к каждому элементу массива.

Вариант 1. Изменяем элементы массива в цикле.

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

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

<?php
$my_array = [];
for($i = 0; $i <= 9; $i++){
   array_push($my_array, $i+1); 
}
?>

Если сейчас мы выведем наш массив на экран, то увидим следующее.

 

<pre>
<?php
print_r($my_array);
?>
</pre>

вывод массива php на экранКак видите, индексы массива начинаются с 0, в то время, как их значения начинаются с 1. В реальной же ситуации довольно часто значение индекса будет не соответствовать значению элемента. Кроме того, индексы в массиве вообще могут идти не по порядку. Об этом следует помнить.

Что если теперь мы захотим изменить каждый элемент массива, умножив его значение на 2.

Мы можем сделать это, воспользовавшись циклом foreach. Мы будем перебирать массив и умножать каждый его элемент на 2.

 

<?php
$new_array = [];
foreach($my_array as $item){
    $new_array[] = $item * 2;
}
?>

Выведем результат на экран.

 

<pre>
<?php
print_r($new_array);
?>
</pre>

перебор массива в цикле foreach Мы получили нужный результат. Теперь давайте попробуем сделать то же самое, но с помощью функции array_map().

Вариант 2. Изменяем элементы массива при помощи array_map().

Эта функция принимает на вход несколько параметров:

  • callback функцию, которая будет обрабатывать каждый элемент массива (можно передать имя функции, а можно прописать анонимную функцию в качестве передаваемого параметра);
  • массив, элементы которого мы изменяем;
  • дополнительные массивы для обработки callback-функцией (необязательный параметр).

Функция возвращает преобразованный массив. Если функции передается один массив, то ключи аргументов будут сохранены (что иногда может иметь большое значение).

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

 

<?php
$new_array1 = array_map(function($n){
  return ($n * 2);  
}, $my_array);
?>

Выведем результат на экран.

перебор массива в цикле foreachПолучаем тот же самый результат. Однако, в этом варианте, даже если бы ключи элементов шли не по порядку, их значения были бы сохранены, в отличие от изменения значений элементов в цикле foreach.

На следующей картинке покажу вам разницу в результатах.

 

 

 

 

как лучше изменять значения элементов массива

Разница в изменении значений элементов массива при использовании foreach и array_map(), когда ключи идут не по порядку.

Попробуйте проделать все это сами, чтобы прочувствовать результат.

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

До новых встреч в новых статьях. Понравилась статья? – Ставьте лайк, делитесь с друзьями, оставляйте комменты.

Tags:

Leave a Reply