2011-11-21 28 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 :) –