php алгоритм деления и задания чисел - PullRequest
1 голос
/ 22 ноября 2011

У меня есть массив, который может иметь любой размер от пользователей.

Максимальный размер значений в каждом запросе к API составляет 100 (от 0 до 99), пользователь может иметь(это может быть 64 или 137 или ....) 234 значения в его собственном массиве, я хочу получить первые сто значений, следующие 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 можно найти здесь

Ответы [ 4 ]

5 голосов
/ 22 ноября 2011

Вы хотите использовать функцию array_chunk.

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

$request_bits = array_chunk($notfm, 100)

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

Альтернативно, вы можете установить отдельное условие для выполнения запроса, когда счетчик равен 100, очистить массивидентификаторов и очистить счетчик, но если управление памятью не является огромной проблемой, array_chunk сделает свое дело.

3 голосов
/ 22 ноября 2011

Вы можете использовать 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
}

Всякий раз, когда мне нужно работать с массивами, я открываю страницу руководства по функциям массива . Быстрый просмотр описаний часто может указывать на функцию массива, которая делает именно то, что вы хотите.

2 голосов
/ 22 ноября 2011

Вы хотите познакомиться с 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 ()

1 голос
/ 22 ноября 2011

Вы можете использовать array_slice

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

И после идет по твоему пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...