函数用法:array_splice($array,$offset,$length,$array_replace)
$offset: 向原数组中删除元素的起始位置,也是插入值的起始位置
$length: 原数组中被删除的元素数量
$array_replace: 要被插入到原数组中的值,多个值必须以数组的形式提供
注意:当参数$offset是负数时,用原数组的长度加上负数作为相应的参数来计算。
一、当原数组是索引数组时
1、这个方法直接在原数组$array上删除由$offset和$length指定的元素,并重建数组索引,它的返回值是被删掉的数组元素组成的数组(这个索引也被重建):
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
print_r(array_splice($a1,0,2));
//输出:Array ( [0] => Dog [1] => Cat )
print_r($a1);
//输出:Array ( [0] => Horse [1] => Bird )
$a2 = array('apple','banana','cat','dog','bird');
print_r(array_splice($a2,2,1));
//输出:Array( [0] => cat )
print_r($a2);
//输出:Array( [0] => apple [1] =>banana [2] => dog [3] => bird )
2、如果给这个方法提供了第四个参数$array_replace,则会在原数组上修改,把由$offset和$length指定的元素的值用$array_replace中的元素值替代,并重建原数组的索引。替换的顺序是$array_replace中元素的创建顺序,与其索引值无关。
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
print_r(array_splice($a1,0,2,$a2));
//输出:Array ( [0] => Dog [1] => Cat )
print_r($a1);
//输出:Array ( [0] => Tiger [1] => Lion [2] => Horse [3] => Bird )
3、事实上,$length的大小与$array_replace的长度无关,$length只代表从原数组中删除多少个元素,无论删除多少个元素,$array_replace中的所有值都会被插入到原数组中的指定起始位置$offset
例如:如果提供第四个参数的同时,$length设为0,则会在原数组中$offset位置开始插入$array_replace中的所有元素
$a1=array(0=>"Dog",1=>"Cat");
$a2=array(0=>"Tiger",1=>"Lion",2=>"Elepant");
print_r(array_splice($a1,1,0,$a2));
//输出:Array ( )
print_r($a1);
//输出:Array ( [0] => Dog [1] => Tiger [2] => Lion [3] => Elepant [4] => Cat )
二、当原数组是关联数组时
1、$offset的计数方法也是按照原数组中元素的创建顺序,与其索引值无关。
2、如果提供了第四个参数,则$array_replace中的元素会按照创建顺序在原数组指定位置进行替换,并且原数组中被替换的那几个元素 和 剩下元素中索引值是数字的元素,它们的索引会从0开始重建
$a1=array('3'=>"Dog",'b'=>"Cat",'2'=>"Horse",1=>"Bird",'5d'=>'Bug','d'=>'buck');
$a2=array('b'=>"Tiger",'a'=>"Lion");
print_r(array_splice($a1,1,2,$a2));
//输出:Array ( [b] => Cat [0] => Horse )
print_r($a1);
//输出:Array ( [0] => Dog [1] => Tiger [2] => Lion [3] => Bird [5d] => Bug [d] => buck )