PHP 8.5.8 Released!

array_slice

(PHP 4, PHP 5, PHP 7, PHP 8)

array_slice从数组中取出一段

说明

function array_slice(
array $array,
int $offset,
? int $length = null ,
bool $preserve_keys = false
): array

array_slice() 返回根据 offsetlength 参数所指定的 array 数组中的一段序列。

参数

array

输入的数组。

offset

如果 offset 非负,则序列将从 array 中的此偏移量开始。

如果 offset 为负,则序列将从 array 中距离末端这么远的地方开始。

注意:

参数 offset 标识的是数组中的位置,而不是键。

length

如果给出了 length 并且为正,则序列中将具有这么多的单元。

如果 array 比 length 要短,只会保留有效的数组单元。

如果给出了 length 并且为负,则序列将终止在距离数组末端这么远的地方。

如果省略,则序列将从 offset 开始一直到 array 的末端。

preserve_keys

注意:

注意 array_slice() 默认会重新排序并重置数组的数字索引。你可以通过将 preserve_keys 设为 true 来改变此行为。 无论本参数如何设置,都会保留字符串的键。

返回值

返回其中一段。 如果 offset 参数大于 array 尺寸,就会返回空的 array。

示例

示例 #1 array_slice() 例子

<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // 返回 "c", "d" 和 "e"
$output = array_slice($input, -2, 1); // 返回 "d"
$output = array_slice($input, 0, 3); // 返回 "a", "b" 和 "c"
// 注意数组中 key 的不同
print_r(array_slice($input, 2, -1));
print_r(array_slice($input, 2, -1, true));
?>

以上示例会输出:

Array
(
 [0] => c
 [1] => d
)
Array
(
 [2] => c
 [3] => d
)

示例 #2 array_slice() 于索引从 1 开始的 array

<?php
$input = array(1 => "a", "b", "c", "d", "e");
print_r(array_slice($input, 1, 2));
?>

以上示例会输出:

Array
(
 [0] => b
 [1] => c
)

示例 #3 array_slice() 与混合类型键的 array

<?php
$ar = array('a'=>'apple', 'b'=>'banana', '42'=>'pear', 'd'=>'orange');
print_r(array_slice($ar, 0, 3));
print_r(array_slice($ar, 0, 3, true));
?>

以上示例会输出:

Array
(
 [a] => apple
 [b] => banana
 [0] => pear
)
Array
(
 [a] => apple
 [b] => banana
 [42] => pear
)

参见

发现了问题?

了解如何改进此页面提交拉取请求报告一个错误
+添加备注

用户贡献的备注 8 notes

up
51
taylorbarstow at the google mail service
20 years ago
Array slice function that works with associative arrays (keys):
function array_slice_assoc($array,$keys) {
 return array_intersect_key($array,array_flip($keys));
}
up
19
Ray.Paseur often uses Gmail
13 years ago
<?php
// CHOP $num ELEMENTS OFF THE FRONT OF AN ARRAY
// RETURN THE CHOP, SHORTENING THE SUBJECT ARRAY
function array_chop(&$arr, $num)
{
 $ret = array_slice($arr, 0, $num);
 $arr = array_slice($arr, $num);
 return $ret;
}
up
7
nathan dot fiscaletti at gmail dot com
8 years ago
If you want an associative version of this you can do the following:
function array_slice_assoc($array,$keys) {
 return array_intersect_key($array,array_flip($keys));
}
However, if you want an inverse associative version of this, just use array_diff_key instead of array_intersect_key. 
function array_slice_assoc_inverse($array,$keys) {
 return array_diff_key($array,array_flip($keys));
}
Example:
$arr = [
 'name' => 'Nathan',
 'age' => 20,
 'height' => 6
];
array_slice_assoc($arr, ['name','age']);
will return 
Array (
 'name' = 'Nathan',
 'age' = 20
)
Where as
array_slice_assoc_inverse($arr, ['name']);
will return 
Array (
 'age' = 20,
 'height' = 6
)
up
4
ted.devito at 9gmail9 dot 99com
18 years ago
based on worldclimb's arem(), here is a recursive array value removal tool that can work with multidimensional arrays.
function remove_from_array($array,$value){
 $clear = true;
 $holding=array();
 
 foreach($array as $k => $v){
 if (is_array($v)) {
 $holding [$k] = remove_from_array ($v, $value);
 }
 elseif ($value == $v) {
 $clear = false;
 }
 elseif($value != $v){
 $holding[$k]=$v; // removes an item by combing through the array in order and saving the good stuff
 }
 } 
 if ($clear) return $holding; // only pass back the holding array if we didn't find the value 
}
up
11
worldclimb at 99gmail99 dot com
18 years ago
array_slice can be used to remove elements from an array but it's pretty simple to use a custom function.
One day array_remove() might become part of PHP and will likely be a reserved function name, hence the unobvious choice for this function's names.
<?
function arem($array,$value){
 $holding=array();
 foreach($array as $k => $v){
 if($value!=$v){
 $holding[$k]=$v;
 }
 } 
 return $holding;
}
function akrem($array,$key){
 $holding=array();
 foreach($array as $k => $v){
 if($key!=$k){
 $holding[$k]=$v;
 }
 } 
 return $holding;
}
$lunch = array('sandwich' => 'cheese', 'cookie'=>'oatmeal','drink' => 'tea','fruit' => 'apple');
echo '<pre>';
print_r($lunch);
$lunch=arem($lunch,'apple');
print_r($lunch);
$lunch=akrem($lunch,'sandwich');
print_r($lunch);
echo '</pre>';
?>
(remove 9's in email)
up
2
Benjamin Sonntag
2 years ago
The documentation doesn't say it, but if LENGTH is ZERO, then the result is an empty array [].
up
8
developer at i-space dot org
24 years ago
remember that array_slice returns an array with the current element. you must use array_slice($array, $index+1) if you want to get the next elements.
up
5
s0i0m at dreamevilconcepts dot com
17 years ago
Using the varname function referenced from the array_search page, submitted by dcez at land dot ru. I created a multi-dimensional array splice function. It's usage is like so:
$array['admin'] = array('blah1', 'blah2');
$array['voice'] = array('blah3', 'blah4');
array_cut('blah4', $array);
...Would strip blah4 from the array, no matter where the position of it was in the array ^^ Returning this...
Array ( [admin] => Array ( [0] => blah1 [1] => blah2 ) [voice] => Array ( [0] => blah3 ) ) 
Here is the code...
<?php
 function varname ($var)
 {
 // varname function by dcez at land dot ru
 return (isset($var)) ? array_search($var, $GLOBALS) : false;
 }
 function array_cut($needle, $haystack)
 {
 foreach ($haystack as $k => $v)
 {
 for ($i=0; $i<count($v); $i++)
 if ($v[$i] === $needle)
 {
 return array_splice($GLOBALS[varname($haystack)][$k], $i, 1);
 break; break;
 }
 }
?>

Check out dreamevilconcept's forum for more innovative creations!
+添加备注

AltStyle によって変換されたページ (->オリジナル) /