Перезапустите цикл while после определенного количества итераций - PullRequest
0 голосов
/ 13 июня 2018

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

Мне нужен мой код для объединения элементов массива, но толькодо 40 из них, а затем перезапустите цикл со следующими 40 элементами, и так далее ... пока он не достигнет конца массива.

Это то, что я до сих пор получил, но результатне то, что я ожидал ...

$length = sizeof($array);
$count1 = 0;

while($count1<$length){

    $count2 = 0;
    while($count2<40){
        foreach($array as $array){
            $arrayids = $array["id"];
            $arrayids .= ",";
            //echoing it out to see what the result is...
            echo $arrayids;
            $count2++;
        }
    }
$count1++;
}

Мой массив выглядит примерно так, хотя он состоит из огромного количества элементов:

    Array
(
    [2] => Array
        (
            [id] => 4UjZ7mTU
        )

    [3] => Array
        (
            [id] => 8UsngmTs
        )

    [4] => Array
        (
            [id] => 8UsngmTs
        )

)

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Вы написали "длина $" неправильно в строке 1. Это то, что дает неожиданные результаты?

0 голосов
/ 13 июня 2018

Вместо того, чтобы делать это так, как вы, возможно, вам следует разбить массив на части.Пример:

<?php

// Create a similar data format.
foreach(range(1,20) as $num)
    $data[]=['id' => $num];

// Output example format for the reader.
var_export(array_slice($data, 0, 3));

$ids = array_column($data, 'id');

// Now let's chunk the ids into fours
foreach(array_chunk($ids, 4) as $chunk)
    echo "\n" . implode(' ', $chunk);

Вывод:

array (
  0 => 
  array (
    'id' => 1,
  ),
  1 => 
  array (
    'id' => 2,
  ),
  2 => 
  array (
    'id' => 3,
  ),
)
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
0 голосов
/ 13 июня 2018

Вы можете легко использовать array_chunk здесь, а затем перебирать фрагменты следующим образом:

$chunks = array_chunk($array, 40);

foreach($chunks as $chunk) {
  foreach ($chunk as $item) {
    //code here;
  }
}

Или в одном цикле while:

$MAX = 3;
$LIST = [1,2,3,4,5,6,7,8,9,10];
$i = 0;
$n = count($LIST);

while ($i < $n) { 
  $base = floor($i/ $MAX);
  $offset = $i % $MAX;

  echo $LIST[($base * $MAX) + $offset];

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