如何在循环中一次访问三个元素?
How to access three elements at a time in a loop?
我在循环中从数组切片时遇到问题。我想要做的是遍历一个数组,每天 return 数组中的 3 个不同部分。因此,例如第一天应该 return 0,1,2 第二天应该 return 3,4,5 等等...我正在使用 array_slice()
并且它适用于第一次迭代,但是在随后的迭代中,它只有 returns 一个包含 1 个项目的数组。任何帮助将非常感激!!
这是我目前拥有的:
foreach ($days as $day) {
$j = $j + 1;
var_dump("j" . $j);
$activities = array_slice($activities, $j, $number_of_activities);
var_dump("day" . $day);
var_dump($activities);
}
这是 return 编辑自 var_dump...
string(2) "j1"
string(4) "day1"
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
string(2) "j2"
string(4) "day2"
array(1) {
[0]=> int(3)
}
我认为它正在做它应该做的事情。您将活动重新分配给切片结果。所以在第二次迭代中,数组有 3 个元素,你从索引 2 开始,所以你的切片只有一个元素(最后一个)。我认为你有逻辑错误。您可能需要一个临时变量来保存切片而不是覆盖活动。
我同意 Kris 的观点,我将使用 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 />
*/
我在循环中从数组切片时遇到问题。我想要做的是遍历一个数组,每天 return 数组中的 3 个不同部分。因此,例如第一天应该 return 0,1,2 第二天应该 return 3,4,5 等等...我正在使用 array_slice()
并且它适用于第一次迭代,但是在随后的迭代中,它只有 returns 一个包含 1 个项目的数组。任何帮助将非常感激!!
这是我目前拥有的:
foreach ($days as $day) {
$j = $j + 1;
var_dump("j" . $j);
$activities = array_slice($activities, $j, $number_of_activities);
var_dump("day" . $day);
var_dump($activities);
}
这是 return 编辑自 var_dump...
string(2) "j1"
string(4) "day1"
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
string(2) "j2"
string(4) "day2"
array(1) {
[0]=> int(3)
}
我认为它正在做它应该做的事情。您将活动重新分配给切片结果。所以在第二次迭代中,数组有 3 个元素,你从索引 2 开始,所以你的切片只有一个元素(最后一个)。我认为你有逻辑错误。您可能需要一个临时变量来保存切片而不是覆盖活动。
我同意 Kris 的观点,我将使用 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 />
*/