2011-05-28 88 views
2

更新

我是PHP开发新手:我查看了PHP网站上的功能 - array_slice。我阅读并看了这个例子,但我不明白。有人能为我明确地解释这一点吗?什么是array_slice()?

我认为它的工作原理如下?

$example = array(1,2,3,4,5,6,7,8,9); 
$offset = 2; 
$length = 5; 
$newArray = array_slice($example, offset, length); 

the result of $newArray is: $newArray(3,4,5,6,7); 
+2

我并不熟悉它,但它看起来像例如array_slice($ arr,3)返回另一个数组,其中包含从3开始的$ arr元素(即,丢失元素0,1和2)。所以它有点像用于字符串的substr函数。 – marnir 2011-05-28 12:23:04

+4

这里要去http://php.net/manual/en/function.array-slice.php – 2011-05-28 12:25:09

+0

这是我的例子正确吗? – user774289 2011-05-28 12:49:38

回答

0

基本上它是一个跳过和接管操作。跳过意思跳转到那个元素。意思是多少。

+0

你可能在PHP手册后再次把头转到他的脖子上......这个可怜的家伙可能不懂你的简洁语言:) – 2011-05-28 12:24:17

+0

好的。谢谢我用一个例子更新了这个问题。 – user774289 2011-05-28 12:35:30

1

该函数返回数组的一个子集。要了解这个人页面,您必须了解数组的键从0开始,即在例如

$array_slice = $array(1,2,3); 

以上包含此:

$array[0] = 1, 
$array[1] = 2, 
$array[2] = 3 

所以,$array_slicedarray_slice(1)将返回:

$arraysliced = array_slice($array_slice, 1); 
$arraysliced[1] = 2; 
$arraysliced[2] = 3; 
+0

感谢您的帮助! – user774289 2011-05-28 12:38:20

+2

这个答案有很多错误。代码与评论混合在一起。那不是你如何定义一个数组。但最大的错误是你写错了数组的键。切一个'1'也没有意义。请参阅[我的回答](http://stackoverflow.com/a/23542155)以获得固定的解释。 – totymedli 2014-05-08 12:49:26

1

它返回您的输入数组的一部分,该部分以您定义的长度的定义偏移量开始。

认为它是这样的:

$output = array(); 
for ($i = 0; $i++; $i < count($input)) { 
    if ($i < $start) 
    continue; 
    if ($i > $start + $length) 
    break; 
    $output[] = $input[$i]; 
} 
+0

这是我在我的问题中的例子是否正确? – user774289 2011-05-28 12:49:17

+0

任何长度的例子。在发布您的示例之前,逐步编写代码。按照它一步一步看看会发生什么。 – 2011-05-28 12:50:40

0

PHP有一个内置 - 在功能上,array_slice(),你可以用它来从 阵列提取元素的范围。要使用它,将它传递给数组以提取切片,然后在 范围内的第一个元素的位置(从零开始计数),然后是要提取的元素数量。该函数返回一个新的 数组,其中包含您提取的元素的副本(它不会触及原始数组)。例如:

$authors = array(“Steinbeck”, 
“Kafka”, “Tolkien”, “Dickens”); 
$authorsSlice = array_slice(
$authors, 1, 2); // Displays “Array 
([0] = > Kafka [1] = > Tolkien)” 
print_r($authorsSlice); 

顺便说,如果离开了第三个参数array_slice(),函数提取从开始位置的所有元素 到数组的末尾:

$authors = array(“Steinbeck”, “Kafka”, “Tolkien”, “Dickens”); 
$authorsSlice = array_slice($authors, 1); 
// Displays “Array ([0] = > Kafka [1] = > Tolkien [2] = > Dickens)”; 
print_r($authorsSlice); 

之前您了解到array_slice()不保留从索引 数组中获取的元素的索引。如果你想保留的索引,你可以通过一个第四个参数,真实,以array_slice():

$authors = array(“Steinbeck”, “Kafka”, “Tolkien”, “Dickens”); 
// Displays “Array ([0] = > Tolkien [1] = > Dickens)”; 
print_r(array_slice($authors, 2, 2)); 
// Displays “Array ([2] = > Tolkien [3] = > Dickens)”; 
print_r(array_slice($authors, 2, 2, true)); 
4

除了stefgosselin's answer有一些错误:让我们开始与他的数组:

$input = array(1,2,3); 

这包含:

array(3) { 
    [0]=> int(1) 
    [1]=> int(2) 
    [2]=> int(3) 
} 

然后你做array_slice

var_dump(array_slice($input, 1)); 

该函数将返回第一个元素后的值(即第二个参数,即偏移量意味着什么)。但注意钥匙!

array(2) { 
    [0]=> int(2) 
    [1]=> int(3) 
} 

请记住,键不会被保留,直到你通过true第四preserve_keys参数。另外,因为在此之前还有另一个length参数,所以如果要在偏移量之后返回所有内容,但必须保留键,则必须通过NULL

var_dump(array_slice($input, 1, NULL, true)); 

这将返回什么stefgosselin(不正确)写在最初。

array(2) { 
    [1]=> int(2) 
    [2]=> int(3) 
} 
相关问题