array_slice函数的奇怪行为

Strange behavior of the array_slice function

提问人:Rafaucau 提问时间:10/2/2019 更新时间:10/2/2019 访问量:59

问:

我有一个代码,可以在循环中对数组的一部分执行一些操作:

for($i = 0; $i<=sizeof($posts); $i+=21){
    $postsToCheck = array_slice($posts, $i, $i+20);
    //var_dump($postsToCheck);
    doSomething($postsToCheck);
}

但它并没有按照应有的方式工作。数组的每个部分应包含 20 条记录,但这仅在第一次迭代中出现。第二个有 41 条记录,第三个有 62 条记录。

如何在每次迭代中将此数组划分为 20 条记录?

PHP 数组 切片

评论

0赞 treyBake 10/2/2019
嗯,是的,你为什么要尝试在循环中切片数组?
1赞 Patrick Q 10/2/2019
第三个参数是切片的长度,而不是它停止的位置。你在循环中递增,所以长度也会增加。$i
0赞 splash58 10/2/2019
$i+=21在第二个循环中 array_slice($posts, 21, 41)
0赞 Rafaucau 10/2/2019
@treyBake我使用的外部 API 对发送的数据的大小有限制。因此,我想将数组分成较小的数组,并将此数据传递给在多个请求中向 API 发送数据的函数

答:

4赞 u_mulder 10/2/2019 #1

这可以替换为以下array_chunk

foreach (array_chunk($posts, 20) as $postsToCheck) {
     doSomething($postsToCheck);
}

正确的循环是:for

for($i = 0; $i<=sizeof($posts); $i+=20){
    // third argument of `array_slice` is "size of slice", it is 20
    $postsToCheck = array_slice($posts, $i, 20); 
    doSomething($postsToCheck);
}
0赞 SamOrSomething 10/2/2019 #2

对于array_slice这样的循环来说,这是正确的行为。

你可以使用这样的东西:

    foreach (array_chunk($posts, 20) as $chunkedPosts) {
        doSomething($chunkedPosts);
    }
0赞 Melih Sevim 10/2/2019 #3

您可以使用array_chunk,

 $lenght = 20;

 array_chunk($posts, 20) => /* after then go loop */

如果你想array_slice

for($i = 0; $i<=sizeof($posts); $i+=($lenght)){
    $postsToCheck = array_slice($posts, $i, $lenght); 
    doSomething($postsToCheck);
}