Вставить новый элемент в массив в любой позиции в PHP - PullRequest
435 голосов
/ 26 сентября 2010

Как я могу вставить новый элемент в массив в любой позиции, например, в середине массива?

Ответы [ 18 ]

1 голос
/ 20 октября 2016

Решение от jay.lee идеально. Если вы хотите добавить элемент (ы) в многомерный массив, сначала добавьте одномерный массив, а затем замените его.

$original = (
[0] => Array
    (
        [title] => Speed
        [width] => 14
    )

[1] => Array
    (
        [title] => Date
        [width] => 18
    )

[2] => Array
    (
        [title] => Pineapple
        [width] => 30
     )
)

Добавление элемента в том же формате в этот массив добавит все новые индексы массива как элементы, а не просто элемент.

$new = array(
    'title' => 'Time',
    'width' => 10
);
array_splice($original,1,0,array('random_string')); // can be more items
$original[1] = $new;  // replaced with actual item

Примечание: Добавление элементов непосредственно в многомерный массив с помощью array_splice добавит все его индексы как элементы вместо только этого элемента.

0 голосов
/ 13 июня 2019
function array_insert($array, $position, $insert) {
    if ($position > 0) {
        if ($position == 1) {
            array_unshift($array, array());
        } else {
            $position = $position - 1;
            array_splice($array, $position, 0, array(
                ''
            ));
        }
        $array[$position] = $insert;
    }

    return $array;
}

Пример вызова:

$array = array_insert($array, 1, ['123', 'abc']);
0 голосов
/ 16 августа 2018

Вот что у меня сработало для ассоциативного массива:

/*
 * Inserts a new key/value after the key in the array.
 *
 * @param $key
 *   The key to insert after.
 * @param $array
 *   An array to insert in to.
 * @param $new_key
 *   The key to insert.
 * @param $new_value
 *   An value to insert.
 *
 * @return
 *   The new array if the key exists, FALSE otherwise.
 *
 * @see array_insert_before()
 */
function array_insert_after($key, array &$array, $new_key, $new_value) {
  if (array_key_exists($key, $array)) {
    $new = array();
    foreach ($array as $k => $value) {
      $new[$k] = $value;
      if ($k === $key) {
        $new[$new_key] = $new_value;
      }
    }
    return $new;
  }
  return FALSE;
}

Источник функции - это сообщение в блоге . Есть также удобная функция для вставки ДО определенной клавиши.

0 голосов
/ 08 мая 2012

Для вставки элементов в массив со строковыми ключами вы можете сделать что-то вроде этого:

/* insert an element after given array key
 * $src = array()  array to work with
 * $ins = array() to insert in key=>array format
 * $pos = key that $ins will be inserted after
 */ 
function array_insert_string_keys($src,$ins,$pos) {

    $counter=1;
    foreach($src as $key=>$s){
        if($key==$pos){
            break;
        }
        $counter++;
    } 

    $array_head = array_slice($src,0,$counter);
    $array_tail = array_slice($src,$counter);

    $src = array_merge($array_head, $ins);
    $src = array_merge($src, $array_tail);

    return($src); 
} 
0 голосов
/ 25 марта 2016

Попробуйте это:

$colors = array('red', 'blue', 'yellow');

$colors = insertElementToArray($colors, 'green', 2);


function insertElementToArray($arr = array(), $element = null, $index = 0)
{
    if ($element == null) {
        return $arr;
    }

    $arrLength = count($arr);
    $j = $arrLength - 1;

    while ($j >= $index) {
        $arr[$j+1] = $arr[$j];
        $j--;
    }

    $arr[$index] = $element;

    return $arr;
}
0 голосов
/ 03 мая 2015

если не уверены, то НЕ ИСПОЛЬЗУЙТЕ ЭТИ :

$arr1 = $arr1 + $arr2;

OR

$arr1 += $arr2;

, поскольку при + исходный массив будет перезаписан. ( см. Источник )

0 голосов
/ 26 ноября 2012

Обычно со скалярными значениями:

$elements = array('foo', ...);
array_splice($array, $position, $length, $elements);

Чтобы вставить один элемент массива в ваш массив, не забудьте обернуть массив в массив (как это было скалярное значение!):

$element = array('key1'=>'value1');
$elements = array($element);
array_splice($array, $position, $length, $elements);

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

0 голосов
/ 06 марта 2013

Подсказка для добавления элемента в начало массива :

$a = array('first', 'second');
$a[-1] = 'i am the new first element';

, то:

foreach($a as $aelem)
    echo $a . ' ';
//returns first, second, i am...

но:

for ($i = -1; $i < count($a)-1; $i++)
     echo $a . ' ';
//returns i am as 1st element
...