Как добавить в массив элемент php
Перейти к содержимому

Как добавить в массив элемент php

  • автор:

PHP: Добавление и удаление элементов массива

Рассмотрим способы записи значений в массив. Существующий массив может быть изменен явной установкой в нем значений. Это выполняется с помощью присваивания значений массиву.

Операция присваивания значения элементу массива выглядит так же, как операция присваивания значения переменной, за исключением квадратных скобок ( [] ), которые добавляются после имени переменной массива. В квадратных скобках указывается индекс/ключ элемента. Если индекс/ключ не указан, PHP автоматически выберет наименьший незанятый числовой индекс.

 'ноль', 1 => 'один'); $my_arr[2] = 'два'; $my_arr[3] = 'три'; var_dump($my_arr); // присваивание без указания индекса/ключа $my_arr[] = 'четыре'; $my_arr[] = 'пять'; echo "
"; var_dump($my_arr); ?>

Для изменения определенного значения, нужно просто присвоить новое значение уже существующему элементу. Чтобы удалить какой-либо элемент массива с его индексом/ключом или удалить полностью сам массив, используется функция unset() :

Примечание: как уже упоминалось выше, если элемент добавляется в массив без указания ключа, PHP автоматически будет использовать предыдущее наибольшее значение ключа типа integer , увеличенное на 1. Если целочисленных индексов в массиве еще нет, то ключом будет 0 (ноль).

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

"; print_r($my_arr); // Добавляем элемент (обратите внимание, что новым ключом будет 3, вместо 0). $my_arr[] = 6; echo "
"; print_r($my_arr); // Делаем переиндексацию: $my_arr = array_values($my_arr); $my_arr[] = 7; echo "
"; print_r($my_arr); ?>

В этом примере использовались две новые функции, print_r() и array_values() . Функция array_values() возвращает индексированный массив (заново индексирует возвращаемый массив числовыми индексами), а функция print_r работает наподобие var_dump , но выводит массивы в более удобочитаемом виде.

Теперь мы можем рассмотреть третий способ создания массивов:

В примере был показан третий способ создания массива. Если массив $weekdays еще не был создан, то он будет создан. Однако такой вид создания массива не рекомендуется применять, так как если переменная $weekdays уже была ранее создана и содержит значение, это может привести к неожиданным результатам работы сценария.

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

'; $no = 'обычная строка'; echo is_array($no) ? 'Массив' : 'Не массив'; ?>

С этой темой смотрят:

  • Числовые массивы
  • Ассоциативные массивы
  • Перебор элементов массива
  • Многомерные массивы

Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2024 © puzzleweb.ru | razumnikum.ru

Добавление элемента в массив PHP

Самый простой способ — с помощью квадратных скобок. Смотрите пример:

Результат выполнения кода:

Через array_push

Для добавления нового элемента в конец массива можно использовать функцию array_push . Смотрите пример:

Результат выполнения кода:

Через array_unshift

Для добавления нового элемента в начало массива можно использовать функцию array_unshift . Смотрите пример:

Результат выполнения кода:

array_merge

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

Если входные массивы содержат одинаковые строковые ключи, то каждое следующее значение ключа перезапишет предыдущее. Однако, если массивы содержат одинаковые числовые ключи, следующее значение не перезапишет исходное, а будет добавлено в конец массива.

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

Список параметров

Список массивов для слияния.

Возвращаемые значения

Функция возвращает результирующий массив. Без аргументов функция возвращает пустой массив ( array ).

Список изменений

Версия Описание
7.4.0 Теперь функция умеет работать без аргументов. Раньше требовался хотя бы один аргумент.

Примеры

Пример #1 Пример использования функции array_merge()

$array1 = array( «color» => «red» , 2 , 4 );
$array2 = array( «a» , «b» , «color» => «green» , «shape» => «trapezoid» , 4 );
$result = array_merge ( $array1 , $array2 );
print_r ( $result );

Результат выполнения приведённого примера:

Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )

Пример #2 Простой пример использования функции array_merge()

$array1 = array();
$array2 = array( 1 => «data» );
$result = array_merge ( $array1 , $array2 );

Помните, что числовые ключи будут перенумерованы!

Array ( [0] => data )

Чтобы добавить элементы второго массива в первый без перезаписи элементов первого массива и без переиндексации, используйте оператор объединения массивов + :

$array1 = array( 0 => ‘zero_a’ , 2 => ‘two_a’ , 3 => ‘three_a’ );
$array2 = array( 1 => ‘one_b’ , 3 => ‘three_b’ , 4 => ‘four_b’ );
$result = $array1 + $array2 ;
var_dump ( $result );

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

array(5) < [0]=>string(6) "zero_a" [2]=> string(5) "two_a" [3]=> string(7) "three_a" [1]=> string(5) "one_b" [4]=> string(6) "four_b" >

Пример #3 Пример использования функции array_merge() не с массивами

$beginning = ‘foo’ ;
$end = array( 1 => ‘bar’ );
$result = array_merge ((array) $beginning , (array) $end );
print_r ( $result );

Результат выполнения приведённого примера:

Array ( [0] => foo [1] => bar )

Смотрите также

  • array_merge_recursive() — Рекурсивно сливает один или несколько массивов
  • array_replace() — Заменяет элементы массива элементами других переданных массивов
  • array_combine() — Создаёт новый массив, используя один массив в качестве ключей, а другой для его значений
  • Операторы, работающие с массивами

User Contributed Notes 5 notes

14 years ago

In some situations, the union operator ( + ) might be more useful to you than array_merge. The array_merge function does not preserve numeric key values. If you need to preserve the numeric keys, then using + will do that.

$array1 [ 0 ] = «zero» ;
$array1 [ 1 ] = «one» ;

$array2 [ 1 ] = «one» ;
$array2 [ 2 ] = «two» ;
$array2 [ 3 ] = «three» ;

$array3 = $array1 + $array2 ;

//This will result in::

$array3 = array( 0 => «zero» , 1 => «one» , 2 => «two» , 3 => «three» );

?>

Note the implicit «array_unique» that gets applied as well. In some situations where your numeric keys matter, this behaviour could be useful, and better than array_merge.

2 years ago

I wished to point out that while other comments state that the spread operator should be faster than array_merge, I have actually found the opposite to be true for normal arrays. This is the case in both PHP 7.4 as well as PHP 8.0. The difference should be negligible for most applications, but I wanted to point this out for accuracy.

Below is the code used to test, along with the results:

$before = microtime ( true );

for ( $i = 0 ; $i < 10000000 ; $i ++) $array1 = [ 'apple' , 'orange' , 'banana' ];
$array2 = [ ‘carrot’ , ‘lettuce’ , ‘broccoli’ ];

$array1 = [. $array1 . $array2 ];
>

$after = microtime ( true );
echo ( $after — $before ) . » sec for spread\n» ;

$before = microtime ( true );

for ( $i = 0 ; $i < 10000000 ; $i ++) $array1 = [ 'apple' , 'orange' , 'banana' ];
$array2 = [ ‘carrot’ , ‘lettuce’ , ‘broccoli’ ];

$array1 = array_merge ( $array1 , $array2 );
>

$after = microtime ( true );
echo ( $after — $before ) . » sec for array_merge\n» ;
?>

PHP 7.4:
1.2135608196259 sec for spread
1.1402177810669 sec for array_merge

PHP 8.0:
1.1952061653137 sec for spread
1.099925994873 sec for array_merge

2 years ago

In addition to the text and Julian Egelstaffs comment regarding to keep the keys preserved with the + operator:
When they say «input arrays with numeric keys will be renumbered» they MEAN it. If you think you are smart and put your numbered keys into strings, this won’t help. Strings which contain an integer will also be renumbered! I fell into this trap while merging two arrays with book ISBNs as keys. So let’s have this example:

$test1 [ ’24’ ] = ‘Mary’ ;
$test1 [ ’17’ ] = ‘John’ ;

$test2 [ ’67’ ] = ‘Phil’ ;
$test2 [ ’33’ ] = ‘Brandon’ ;

$result1 = array_merge ( $test1 , $test2 );
var_dump ( $result1 );

$result2 = [. $test1 , . $test2 ]; // mentioned by fsb
var_dump ( $result2 );
?>

You will get both:

Use the + operator or array_replace, this will preserve — somewhat — the keys:

$result1 = array_replace ( $test1 , $test2 );
var_dump ( $result1 );

$result2 = $test1 + $test2 ;
var_dump ( $result2 );
?>

You will get both:

The keys will keep the same, the order will keep the same, but with a little caveat: The keys will be converted to integers.

1 year ago

Not to contradict ChrisM’s test, but I ran their code example and I got very different results for PHP 8.0.

Testing PHP 8.0.14
1.4955070018768 sec for spread
4.4120140075684 sec for array_merge

3 years ago

We no longer need array_merge() as of PHP 7.4.

does the same as

and can be faster too.

  • Функции для работы с массивами
    • array_​change_​key_​case
    • array_​chunk
    • array_​column
    • array_​combine
    • array_​count_​values
    • array_​diff_​assoc
    • array_​diff_​key
    • array_​diff_​uassoc
    • array_​diff_​ukey
    • array_​diff
    • array_​fill_​keys
    • array_​fill
    • array_​filter
    • array_​flip
    • array_​intersect_​assoc
    • array_​intersect_​key
    • array_​intersect_​uassoc
    • array_​intersect_​ukey
    • array_​intersect
    • array_​is_​list
    • array_​key_​exists
    • array_​key_​first
    • array_​key_​last
    • array_​keys
    • array_​map
    • array_​merge_​recursive
    • array_​merge
    • array_​multisort
    • array_​pad
    • array_​pop
    • array_​product
    • array_​push
    • array_​rand
    • array_​reduce
    • array_​replace_​recursive
    • array_​replace
    • array_​reverse
    • array_​search
    • array_​shift
    • array_​slice
    • array_​splice
    • array_​sum
    • array_​udiff_​assoc
    • array_​udiff_​uassoc
    • array_​udiff
    • array_​uintersect_​assoc
    • array_​uintersect_​uassoc
    • array_​uintersect
    • array_​unique
    • array_​unshift
    • array_​values
    • array_​walk_​recursive
    • array_​walk
    • array
    • arsort
    • asort
    • compact
    • count
    • current
    • end
    • extract
    • in_​array
    • key_​exists
    • key
    • krsort
    • ksort
    • list
    • natcasesort
    • natsort
    • next
    • pos
    • prev
    • range
    • reset
    • rsort
    • shuffle
    • sizeof
    • sort
    • uasort
    • uksort
    • usort
    • each
    • Copyright © 2001-2024 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    PHP: Как добавить элемент массива после указанного элемента?

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

    Оглавление:

    • Примеры
    • Ассоциативный массив
    • Вставим по порядковому номеру
    • Вставим после указанного ключа (по названию ключа)
    • Индексированный массив
    • Универсальная функция
    • Примеры использования
    • Ассоциативный массив
    • Индексированный массив

    Примеры

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

    Вставим по порядковому номеру

    Добавим элемент после указанного по счету элемента. В примере после второго элемента:

    $array = [ 'one' => 'one value', 'two' => 'two value', 'three' => 'three value', ]; $array = array_slice( $array, 0, 2 ) + [ 'newKey' => 'newValue' ] + $array; print_r( $array ); /* Array ( [one] => one value [two] => two value [newKey] => newValue [three] => three value ) */
    Вставим после указанного ключа (по названию ключа)

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

    $array = [ 'one' => 'one value', 'two' => 'two value', 'three' => 'three value', ]; $after_key = 'two'; $index = array_search( $after_key, array_keys( $array ) ); $array = array_slice( $array, 0, $index + 1 ) + [ 'newKey' => 'newValue' ] + $array; print_r( $array ); /* Array( [one] => one value [two] => two value [newKey] => newValue [three] => three value ) */

    Индексированный массив

    $array = [ 'one', 'two', 'three', ]; $array = array_merge( array_slice( $array, 0, 2 ), [ 'newValue' ], array_slice( $array, 2 ) ); print_r( $array ); /* Array ( [0] => one [1] => two [2] => newValue [3] => three ) */

    Универсальная функция

    Для решения предлагаю универсальную функцию:

    /** * Inserts an array after a specified key in another array. * * This function searches for the specified key in the provided array. If the key is found, * it inserts the given array immediately after that key. If the key is not found, the given * array is appended to the end of the original array. * * @param array $array The original array to modify. * @param mixed $key The key after which the new array should be inserted. * @param array $insert_array The array to insert into the original array. * * @return void */ function array_insert_after_key( & $array, $key, $insert_array ) < $index = array_search( $key, array_keys( $array ) ); // key is not found, add to the end of the array if( $index === false )< $array = array_merge( $array, $insert_array ); >// split the array into two parts and insert a new element between them else < $array = array_merge( array_slice( $array, 0, $index + 1, true ), $insert_array, array_slice( $array, $index + 1, null, true ) ); >>

    Примеры использования

    Ассоциативный массив
    $array = [ 'a' => 1, 'b' => 2, 'c' => 3 ]; array_insert_after_key( $array, 'b', [ 'newKey' => 'newValue' ] ); print_r( $array ); /* Array ( [a] => 1 [b] => 2 [newKey] => newValue [c] => 3 ) */
    $array = [ 'a' => 1, 'b' => 2, 'c' => 3 ]; $inset_array = [ 'newKey' => 'newValue', 'newKey2' => 'newValue2', ]; array_insert_after_key( $array, 'b', $inset_array ); print_r( $array ); /* Array ( [a] => 1 [b] => 2 [newKey] => newValue [newKey2] => newValue2 [c] => 3 ) */
    Индексированный массив
    $array1 = [ 1, 2, 3, ]; array_insert_after_key( $array1, 1, [ 'newValue' ] ); print_r( $array1 ); /* Array ( [0] => 1 [1] => 2 [2] => newValue [3] => 3 ) */
    $array1 = [ 1, 2, 3, ]; array_insert_after_key( $array1, 1, [ 'newValue', 'newValue2' ] ); print_r( $array1 ); /* Array ( [0] => 1 [1] => 2 [2] => newValue [3] => newValue2 [4] => 3 ) */

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *