在确定的迭代次数后循环重新启动



我被这个困住了,我需要完成的事情应该非常简单,但我真的很难找到逻辑。

我需要我的代码来连接数组的项目,但最多只能连接 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
)
)

您可以在此处轻松使用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++;
}

您在第 1 行中拼写错误的"$length"。这就是给你带来意想不到的结果吗?

与其按照你现在的方式做,也许你应该对数组进行分块。 例:

<?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

最新更新