2011-05-28 13 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) 
}