在多维PHP数组的特定索引后插入两个项目,并在现有索引处删除数组

时间:2017-04-03 21:05:21

标签: php arrays array-splice

我希望在特定索引与多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()但是因为它增加了匹配时现有数组的长度,所以它最终也会覆盖循环中的新数组元素。

2 个答案:

答案 0 :(得分:2)

使用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);

答案 1 :(得分:1)

我通过以下更改得到了它:

$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;