我同意克里斯,我會用array_chunk()
來完成這項任務。原因在於,如果在循環外部使用array_chunk()
,則它是一次性完成函數調用,您可以通過塊索引儘可能多地訪問它。在循環中使用array_slice()
將意味着每次迭代都會調用一次函數,效率會降低,因此不是最佳實踐。
考慮these demos:
演示#1:的活動比需要的,但沒有問題:
$days=[1,2,3];
$activities=['Poker','Blackjack','Omaha','Pinochle','500','Euchre','Canasta','Hearts','Spades','Multitaire'];
$activities_per_day=3;
$activity_sets=array_chunk($activities,$activities_per_day);
foreach($days as $i=>$d){
echo "Day: $d, Activities: ",implode(', ',$activity_sets[$i]),"\n";
}
/*
Day: 1, Activities: Poker, Blackjack, Omaha
Day: 2, Activities: Pinochle, 500, Euchre
Day: 3, Activities: Canasta, Hearts, Spades
*/
演示#2:沒有足夠的活動來填補最後一天,但沒有問題:
$days=[1,2,3];
$activities=['Poker','Blackjack','Omaha','Pinochle','500','Euchre','Canasta'];
$activities_per_day=3;
$activity_sets=array_chunk($activities,$activities_per_day);
foreach($days as $i=>$d){
echo "Day: $d, Activities: ",implode(', ',$activity_sets[$i]),"\n";
}
/*
Day: 1, Activities: Poker, Blackjack, Omaha
Day: 2, Activities: Pinochle, 500, Euchre
Day: 3, Activities: Canasta
演示#3:最後一天沒有活動 - 導致問題:
$days=[1,2,3];
$activities=['Poker','Blackjack','Omaha','Pinochle','500','Euchre'];
$activities_per_day=3;
$activity_sets=array_chunk($activities,$activities_per_day);
foreach($days as $i=>$d){
echo "Day: $d, Activities: ",implode(', ',$activity_sets[$i]),"\n";
}
/*
Day: 1, Activities: Poker, Blackjack, Omaha
Day: 2, Activities: Pinochle, 500, Euchre
Day: 3, Activities: <br />
<b>Notice</b>: Undefined offset: 2 in <b>[...][...]</b> on line <b>33</b><br />
<br />
<b>Warning</b>: implode(): Invalid arguments passed in <b>[...][...]</b> on line <b>33</b><br />
*/
好吧,那麼以'$ days'開頭的是什麼?這就是說,請注意你在你的帖子中說過的話:爲了''d''你想要一個'd-1','d','d + 1'的切片,那麼爲什麼不寫你的代碼呢? –
哈哈同意......請提供$天數組,以便我們可以用您的值測試代碼。 –
'array_chunks($ days,3);' –