如何对数组中的第 2、3 和 5 个元素进行操作?

How to operate on every 2nd, 3rd and 5th element in an array?

提问人:Jeff 提问时间:3/22/2013 最后编辑:Jeff 更新时间:3/22/2013 访问量:353

问:

我有一个非常简单的索引数组:

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。感谢您的所有回答。

PHP 数组循环

评论

1赞 John Conde 3/22/2013
你甚至需要一个循环吗?
0赞 Barranka 3/22/2013
如果你需要一个循环,那么你正在考虑某种进展......你正在考虑的进展是:?2, 3, 5, ... , n[i] = n[i-1] + n[i-2]
0赞 Jeff 3/22/2013
我不确定。如果没有循环,您将如何完成它?
2赞 salathe 3/22/2013
为什么不使用 array_chunk() 来正确分组相关值(看起来每个 7 块都是一个组),然后您可以访问每个数组的偏移量 1、2 和 4。

答:

0赞 Nick Andriopoulos 3/22/2013 #1

您需要使用模运算符 ( )。它返回数字除法的余数,通常用于检查一个数字是否是另一个数字的倍数。%

所以,检查一个数字是偶数(正好能被 2 整除),你做

$odd = $number%2;

为了使它成为一个完整的答案,您可以在循环中使用以下标准(没有条件不知道该怎么做):

for($i=0; $i<count($array)-1;$i++){
  if($i%5==0) { $str .= $array[$i]; }
}
1赞 Kermit 3/22/2013 #2

像这样的东西?

$i = 0;

foreach($array as $value) {
    if ($i++ % 2 == 0 || $i++ % 3 == 0 || $i++ % 5 == 0) {
        echo $value;
    }
}
0赞 Cal 3/22/2013 #3

两种不同的方法:遍历所有条目并使用 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]
0赞 evgenyl 3/22/2013 #4

您需要采用步骤 2-1-2、2-1-2 的序列。你可以用双循环,循环+案例来做到这一点......

0赞 Barranka 3/22/2013 #5

我不太了解 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......但我认为它说明了这个想法)

如果您需要不同的进度,您需要回答以下问题:如何使用前一个值计算下一个值?然后,您可以构建一个使工作有效的算法。

希望这对你有所帮助。

0赞 nickb 3/22/2013 #6
foreach( array_chunk( $array, 7) as $row) {
    echo $row[1] . ' , ' . $row[2] . ' , ' . $row[4] . "\n";
}

评论

0赞 Jeff 3/22/2013
非常好,nickb。我会试一试。
0赞 nickb 3/22/2013
@Jeff - 你可以看到它在这个演示中工作,它产生了你的确切输出。