提问人:Jeff 提问时间:3/22/2013 最后编辑:Jeff 更新时间:3/22/2013 访问量:353
如何对数组中的第 2、3 和 5 个元素进行操作?
How to operate on every 2nd, 3rd and 5th element in an array?
问:
我有一个非常简单的索引数组:
Array
(
[0] => 1
[1] => Buster Posey
[2] => SF
[3] => C
[4] => 16.60
[5] => 5
[6] => 28
[7] => 2
[8] => Joe Mauer
[9] => Min
[10] => C
[11] => 57.60
[12] => 35
[13] => 80
...
我需要将每个第 2、3 和 5 个键值添加到 。$str
我可以处理操作,但我不能把我的小脑袋包裹在我需要的循环/计数器上,所以只要朝着正确的方向推动就很棒了。$str
为清楚起见,我给出的上述数组的结果如下所示:$str
Buster Posey, SF, 16.60
Joe Mauer, Min, 57.60
这是数组的第 2、3 和 5 个元素,其中添加了几个逗号和一个换行符,以便在数组中一直重复。
编辑:
我的问题有误。下面salathe的评论是正确的。它们以 7 个为一组,所以我需要每个第 2、3 和 5 个元素,然后跳过 2 个并重新开始该过程。我将按照建议使用array_chunk。感谢您的所有回答。
答:
您需要使用模运算符 ( )。它返回数字除法的余数,通常用于检查一个数字是否是另一个数字的倍数。%
所以,检查一个数字是偶数(正好能被 2 整除),你做
$odd = $number%2;
为了使它成为一个完整的答案,您可以在循环中使用以下标准(没有条件不知道该怎么做):
for($i=0; $i<count($array)-1;$i++){
if($i%5==0) { $str .= $array[$i]; }
}
像这样的东西?
$i = 0;
foreach($array as $value) {
if ($i++ % 2 == 0 || $i++ % 3 == 0 || $i++ % 5 == 0) {
echo $value;
}
}
两种不同的方法:遍历所有条目并使用 mod,或针对每个不同的条件进行循环。
全部在一个循环中:
foreach ($array as $k => $v){
if ($k % 2 == 0 || $k % 3 == 0 || $k % 5 == 0){
.. do something with $v
}
}
不同的循环:
for ($i=0; $i<count($array); $i+=2) .. do something with $array[$i]
for ($i=0; $i<count($array); $i+=3) .. do something with $array[$i]
for ($i=0; $i<count($array); $i+=5) .. do something with $array[$i]
您需要采用步骤 2-1-2、2-1-2 的序列。你可以用双循环,循环+案例来做到这一点......
我不太了解 PHP,但如果我理解正确的话,您需要按照级数连接索引 2、3、5 甚至更多:
n[0] = 2
n[1] = 3
n[2] = 5
...
n[i] = n[i-1] + n[i-2]
因此,您可能需要创建一个需要连接的索引数组,提供前两个值(对我来说看起来像斐波那契数列):
n[0] = 2;
n[1] = 3;
for(i=2, i<m, i++) {
n[i] = n[i-1] + n[i-2];
}
然后,您可以使用此数组来连接数组中的所需值:
for(i=0; i<m; i++) {
str = concatenate(str, arr[n[i]]);
}
(我知道语法不是 PHP......但我认为它说明了这个想法)
如果您需要不同的进度,您需要回答以下问题:如何使用前一个值计算下一个值?然后,您可以构建一个使工作有效的算法。
希望这对你有所帮助。
foreach( array_chunk( $array, 7) as $row) {
echo $row[1] . ' , ' . $row[2] . ' , ' . $row[4] . "\n";
}
评论
2, 3, 5, ... , n[i] = n[i-1] + n[i-2]