天天看点

array_slice和array_splice()区别

作者:寒笛过霜天

array_slice — 从数组中取出一段,原来的数组未发生变化

array array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] )

array_slice() 返回值:默认将重置数组的键(false) 如果数组中有字符键,所返回的将保留键名(包含为其重建数字索引的数组键名)

true 则保留键名;

$lamp=array("Linux", "Apache", "MySQL", "PHP"); //声明一个索引数组$lamp包含4个元素
//使用array_slice()从第二个开始取(0是第一个,1为第二个),取两个元素从数组$lamp中返回
print_r(array_slice($lamp,1,2)); //输出:Array ( [0] => Apache [1] => MySQL )
//第二个参数使用负数参数为-2,从后面第二个开始取,返回一个元素
print_r(array_slice($lamp,-2,1)); //输出: Array ( [0] => MySQL )
//最后一个参数设置为 true,保留原有的键值返回
print_r(array_slice($lamp,1,2,true)); //输出:Array ( [1] => Apache [2] => MySQL )
$lamp=array("a"=>"Linux","b"=>"Apache","c"=>"MySQL","d"=>"PHP"); //声明一个关联数组
//如果数组有字符串键,默认所返回的数组将保留键名
print_r(array_slice($lamp,1,2)); //输出:Array ( [b] => Apache [c] => MySQL )

0 1 2 3 4
-5 -4 -3 -2 -1           

array_splice — 把数组中的一部分去掉并用其它值取代,原数组发生了变化(array &$input引用值)

array array_splice ( array &$input , int $offset [, int $length [, array $ replacement ]] )

array_splice() 把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,

则用 replacement 数组中的单元取代。返回一个包含有被移除单元的数组。注意 input 中的数字键名不被保留。

$replacement如果传入的是单个值,则不能添加键名(索引和关联),否则出现Parse error: syntax error, unexpected T_DOUBLE_ARROW

如果传入的是数组,则可以添加键名

第三个参数$length为正值,则表示长度,$length为负值的话,则移除从offset到数组末尾倒数length为止中间所有的元素。

第四个参数可以为字符串,也可以为数组来替代移除的值;

$input = array("Linux", "Apache", "MySQL", "PHP");
array_splice($input, 2); //原数组中的第二个元素后到数组结尾都被删除
print_r($input); //输出:Array ( [0] => Linux [1] => Apache )
$input = array("Linux", "Apache", "MySQL", "PHP");
array_splice($input, 1, -1); //从第二个开始移除直到数组末尾倒数1个为止中间所有的元素
print_r($input); //输出:Array ( [0] => Linux [1] => PHP )
$input = array("Linux", "Apache", "MySQL", "PHP");
array_splice($input, 1, count($input), "web"); //从第二个元素到数组结尾都被第4个参数替代
print_r($input); //输出:Array ( [0] => Linux [1] => web )
$input = array("Linux", "Apache", "MySQL", "PHP");
array_splice($input, -1, 1, array("web", "www")); //最后一个元素被第4个参数数组替代
print_r($input); //输出:Array ( [0] => Linux [1] => Apache [2] => MySQL [3] => web [4] => www )           

array_splice() 等价表达式

array_push($input, $x, $y) array_splice($input, count($input), 0, array($x, $y))

array_pop($input) array_splice($input, -1)

array_shift($input) array_splice($input, 0, 1)

array_unshift($input, $x, $y) array_splice($input, 0, 0, array($x, $y))

$input[$x] = $y // 对于键名和偏移量等值的数组 array_splice($input, $x, 1, $y)

提示: 在获取到全部的数据情况下, array_slice() 和 array_splice() 都可用于分页

如何将值追加到数组某个元素的前面或后面?

<?php
$arr = array(101, 102, 103, 104, 105, 106, 107);
$pos = 0;
$id1 = 103;
$id2 = 105;
/*
//方法一
echo reset($arr);
$newarr = array();
foreach ($arr as $key=>$value){
if($value == $id2){
unset($arr[$key]);
}else{
$newarr[] = $value;
}
if($value == $id1){
$newarr[] = $id2;
}

}
echo "新的数组是:";
var_export($newarr);
*/
//方法二
foreach ($arr as $key=>$value){
if($value == $id1){
$pos = $key;
}
if($value == $id2){
unset($arr[$key]);
}
}
echo "当前的位置:".$pos;
$newarr = array_splice($arr, $pos+1, 0, $id2); //当前的数组元素的后面
echo "新的数组是:";
var_export($arr);
?>