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

Здравствуйте!

Имеется следующий ассоциативный массив:
$arr = array(
'key1' => 0,
'key2' => 0,
....
'keyN' => 0,
);

как можно вставить новый элемент 'test' после элемента, скажем, 'key51'. Спасибо.
  • Вопрос задан
  • 15295 просмотров
Пригласить эксперта
Ответы на вопрос 6
Вот здесь рассказывают stackoverflow.com/questions/3353745/how-to-insert-...
Ответ написан
Комментировать
@Zaredis
Если известна позиция для нового элемента, попробуйте array_splice.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Если у вас ассоциативный массив то вам не нужно соблюдать порядок. Иначе у вас уже не ассоциативный массив.
Ответ написан
@Kjuri
у вас ассоциативный массив, т.е. если имеются ключи именно в виде текста, то никак. Максимум, это добавить элемент с ключом 'key52' - а затем сортировка. Чтобы добавить в определенное место, и в частности с помощью array_splice - в качестве ключей должны быть цифры, 0,1,2... Соответственно, чтобы добавить после элемента с 51 ключом - создать элемент с 52 ключом.
Ответ написан
Комментировать
servdo
@servdo
Почитайте коллекции и выберите более подходящую под ваши задачи.
Ответ написан
Комментировать
@IC-Winner
Можно так:
function insertToArray($array=array(), $new=array(), $after='') {
  $res = array();
  $res1 = array();
  $res2 = array();
  $c = 0;
  $n = 0;
  foreach ($array as $k => $v) {
    if ($k == $after) { 
      $n = $c;
    } 
    $c++;
  }
  $c = 0;
  foreach ($array as $i => $a) {
    if ($c > $n) { 
      $res1[$i] = $a;
    } else {
      $res2[$i] = $a;
    }
    $c++;
  }
  $res = $res2 + $new + $res1;
  return $res;
}

$arr = array(
'key1' => 0,
'key2' => 0,
'keyN' => 0,
);

$new = array('new' => 0);
$arr = insertToArray($arr, $new, 'key2');

echo '<pre>'; print_r($arr); echo '</pre>';

Результат:
Array
(
    [key1] => 0
    [key2] => 0
    [new] => 0
    [keyN] => 0
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы