array_slice函数的奇怪行为

时间:2019-10-02 13:28:42

标签: php arrays slice

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

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

但是它并不能正常工作。数组的每个部分都应包含20条记录,但这只是第一次迭代中的情况。第二个有41条记录,第三个有62条记录。

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

3 个答案:

答案 0 :(得分:4)

可以用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);
}

答案 1 :(得分:0)

在这样的循环中,这是array_slice的正确行为。

您可以使用以下内容:

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

答案 2 :(得分:0)

您可以使用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);
}