Создать отверстие в массиве

У меня есть массив формы

$array = array(1 => 'a',
               2 => 'b',
               3 => 'c',
               4 => 'd')

и я хотел бы создать "отверстие" между 2 и 3, т.е. получить следующий массив

$array = array(1 => 'a',
               2 => 'b',
               4 => 'c',
               5 => 'd')

Что вы считаете лучшим способом сделать это?

Ответ 1

Это должно работать:

function array_drill_hole($input, $start, $end) {
    array_splice($input, $start, $end - $start, null);
    return $input;
}

Ответ 2

$array = array_combine(array_merge(range(1, 2), range(4, 5)), $array);

Ответ 3

define("N", 3);

$i = count($array);
while ($i >= N) {
   $array[$i+1] = $array[$i];
   $i--;
}
unset ($array[ N ]);

или эквивалент для версии

define("N", 3);

for($i=count($array) ; $i >= N ; $i--) {
   $array[$i+1] = $array[$i];
}
unset ($array[ N ]);

Ответ 4

Я хочу присоединиться: http://codepad.org/9JDGHxhK

array_splice($array, 2, 0, "");

return array_filter($array);

Ответ 5

Вот проверенное полное решение:

function makeHole($index,$holeArr) {
            $returnArr = array();
            $increaseFlag = false;
            foreach ($holeArr as $ind => $val) {
                if ($ind == $index || $increaseFlag) {
                    $increaseFlag = true;
                    $returnArr[$ind+1] = $val;
                } else {
                    $returnArr[$ind] = $val;
                }
            }
            return $returnArr;
        }

        $array = array(1 => 'a',
            2 => 'b',
            3 => 'c',
            4 => 'd');
        $result = makeHole(3,$array);
        echo '<pre>';
        print_r($result);
        echo '</pre>';

Ответ 6

$array = array(1 => 'a',
               2 => 'b',
               3 => 'c',
               4 => 'd');
array_splice($array, 2, 0, " ");
array_splice($array, 3, 0, " ");
unset($array[3]);
unset($array[2]);

var_dump($array);

Вывод:

array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [4]=> string(1) "c" [5]=> string(1) "d" }