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

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

У меня есть массив с секвенциальными числовыми ключами

Пример:

Array ( [0] => value 0 [1] => value 1 [2] => value 2 [3] => value 3 ) 

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

Пример:

Мне нужно добавить [a] => value a между клавишами 1 и 2 как

 Array ( [0] => value 0 [1] => value 1 [a] => value a [2] => value 2 [3] => value 3 ) 

То, что я уже делал, но кажется длинным

  • нарезая мой массив пополам, добавьте пару ключ / значение в конец среза и рекомбинируем мои 2 среза в один массив

  • каким-то образом продвигая каждый ключ на один после нажатия клавиши 1 меняя мою новую пару ключ / значение на [2] => value a , добавьте ее в конец массива, а затем прибегните к моему массиву

Любые предложения по быстрому чистному способу достижения этого

Related of "Добавить пару ключ / значение между двумя парами в массиве"

Не знаю, почему вы это сделаете …

  $array = array(0=>0,1=>1,2=>2,3=>3); $add = array('a'=>'a'); $before_key = 2; $new_array = array(); foreach($array as $key=>$val) { if($key===$before_key) { $new_array[key($add)] = $add[key($add)]; } $new_array[$key] = $val; } $array = $new_array; var_dump($array); 

Я предполагаю, что исходный массив может быть ассоциативным …

 $ar = array ( '0' => 'value 0', '1' => 'value 1', '2' => 'value 2', '3' => 'value 3', ); var_dump(insertAfter($ar, '1', array('a' => 'a'))); function insertAfter($arr, $key, $piece) { $keys = array_keys($arr); $index = array_search($key, $keys); if ($index !== false) $ar = array_merge( array_slice($arr, 0, $index + 1, true), $piece, array_slice($arr, $index + 1, null, true)); return $ar; } 

Результат:

 array(5) { [0]=> string(7) "value 0" [1]=> string(7) "value 1" ["a"]=> string(1) "a" [2]=> string(7) "value 2" [3]=> string(7) "value 3" } 

ps: исправлено для ключей, но если в сохранении ключей нет необходимости,

 function insertAfter($arr, $key, $piece) { $before = array(); $keys = array_keys($arr); $index = array_search($key, $keys); if ($index !== false) $before = array_splice($arr, 0, $index + 1, $piece); return array_merge($before, $arr); } 

Вот мой псевдокод моего подхода (это написано на питоне, но концепция все еще существует)

 for key, item in enumerate(array): if key == 2: thirdKey = array[key] array[1] = a if key == 3: fourthKey = array[key] array[2] = thirdKey if key == 4: array[3] = fourthKey 

Вид длинного подхода, но я надеюсь, что это поможет 🙂