天天看點

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);
?>