提问人:Rafaucau 提问时间:10/2/2019 更新时间:10/2/2019 访问量:59
array_slice函数的奇怪行为
Strange behavior of the array_slice function
问:
我有一个代码,可以在循环中对数组的一部分执行一些操作:
for($i = 0; $i<=sizeof($posts); $i+=21){
$postsToCheck = array_slice($posts, $i, $i+20);
//var_dump($postsToCheck);
doSomething($postsToCheck);
}
但它并没有按照应有的方式工作。数组的每个部分应包含 20 条记录,但这仅在第一次迭代中出现。第二个有 41 条记录,第三个有 62 条记录。
如何在每次迭代中将此数组划分为 20 条记录?
答:
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);
}
评论
$i
$i+=21
在第二个循环中 array_slice($posts, 21, 41)