Вставьте два элемента после определенного индекса многомерного массива PHP и удалите массив по существующему индексу

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

Образец массива:

$array = array(
array( 1, 2, 3 ),
array( 4, 5, 6 ),
array( 7, 8, 9 )
);

После вставки и удаления существующего индексного массива

$array = array(
array( 1, 2, 3 ),
array( 'new', 'array' ),
array( 'another', 'item' ),
array( 7, 8, 9 )
);

Находясь в цикле, когда условие выполняется так:

foreach ( $array as $index => $value ) :
if ( $index % 2 == 0 ) :
// insert two array elements in $array after index $index and remove $index
endif;
endforeach;

Любая помощь приветствуется.

ОБНОВИТЬ:

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

0

Решение

Используя foreach цикл для этого был бы расточительным. Просто используйте array_splice() вместо:

<?php
$array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
$replacement = [['new', 'array'], ['another', 'item']];
$target = 1;

array_splice($array, $target, 1, $replacement);
print_r($array);

На основании ваших правок вы можете попробовать это:

<?php
$array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
$replacement = [['new', 'array'], ['another', 'item']];
$new = [];

foreach ($array as $k=>$v) {
if ($k % 2 == 0) {
foreach($replacement as $r) {
$new[] = $r;
}
} else {
$new[] = $v;
}
}
print_r($new);
2

Другие решения

Я получил его работать со следующими изменениями:

$array = array(
array( 1, 2, 3 ),
array( 4, 5, 6 ),
array( 7, 8, 9 )
);

$new_array = array();

foreach ( $array as $index => $value ) {

if ( $index % 2 == 0 ) {

array_push( $new_array, array( 'new', 'array' ) );
array_push( $new_array, array( 'another', 'array' ) );

continue;

}

array_push( $new_array, $array[ $index ] );

}

$array = $new_array;
1

По вопросам рекламы [email protected]