2011-11-21 70 views
1

我有一個數組可以是來自用戶的任何大小。php算法劃分和設置數字

對API的每個請求中值的最大大小爲100(從0到99),用戶可能有(其變化可能是64或137或......) 234自己的數組中的值,我想要的是獲得前100個值,接下來的100個值,然後是存儲在數組或字符串中的接下來的34個值。

有點像;

First Hundred : 0 - 99 //100 
Second Hundred : 100 - 199 //100 
Next Values  : 200 - 234 //34 

在每種情況下,這些值會附加到字符串,如下所示。

$lookupString = ""; 

    //$notfm = one-dim array of values 

    for($i = 0; $i <= 99; $i++){ 
     $lookupString .= $notfm[$i].","; 
    } 

$lookup = "http://api.lol.com/1/?user_ids=".$lookupString; 

有人可以幫助我嗎?我認爲這很容易,但我錯過了一些東西。謝謝。 JSON的編碼陣列的

樣品可以發現here

回答

5

您要使用的array_chunk功能。

http://php.net/manual/en/function.array-chunk.php

$request_bits = array_chunk($notfm, 100) 

foreach ($request_bits as $request_bit) { 
    ... 
} 

或者,你可以設置一個單獨的條件,使請求時,計數器100,空ID數組,並清空計數器,但除非內存管理是一個巨大的問題array_chunk會做的伎倆。

+0

該死!很簡單!謝謝 – Mob

1

您可以使用array_slice

$first = array_slice($input, 0, 100); 
$second = array_slice($input, 100, 100); 
$third = array_slice($input, 200, 34); 

而且去你想要什麼以後的路。

2

你要熟悉range()array_chunk()

// make an array with all the numbers from 1 to 1000 
$notfm = range(1,1000); 

// make groups of 100 each 
$chunks = array_chunk($notfm, 100); 

// loop over each chunk of 100 
foreach ($chunks as $lookupArray) { 
    $lookupString = implode(',', $lookupArray); 
    $lookup = "http://api.example.com/1/?user_ids=" . rawurlencode($lookupString); 
    // do stuff 
} 

文檔:range()array_chunk()implode()

+0

我認爲他已經從用戶那裏獲得了他的一系列ID。 –

+0

的確如此,但爲了測試它看到它在一個範圍內的工作是好的。我剛剛還添加了一個'rawurlencode'代碼,所以如果垃圾進入那裏,OP沒有打開一個注入漏洞。 – artlung

+0

謝謝!就是這個。 – Mob

3

您可以使用array_chunk()implode()

$input_array; 

// Split into chunks of 100 
$chunks = array_chunk($input_array, 100); 

foreach ($chunks as $chunk) 
{ 
    // Build the lookup string 
    $lookupString = implode(",", $chunk); 

    // DO LOOKUP HERE 
} 

每當我需要使用數組時,我打開了array functions manual page。通過描述的快速掃描通常可以指出一個數組函數,它完全符合你的需求。

+0

啊,我已經忍住了。 –

+1

大聲笑你不討厭當這種情況發生rofl :) –