0

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

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的评论是正确的。它们以七个为一组,因此我需要每个第 2、第 3 和第 5 个元素,然后跳过 2 并重新开始该过程。我将按照建议使用array_chunk。感谢所有的答案。

4

6 回答 6

1

像这样的东西?

$i = 0;

foreach($array as $value) {
    if ($i++ % 2 == 0 || $i++ % 3 == 0 || $i++ % 5 == 0) {
        echo $value;
    }
}
于 2013-03-21T21:02:59.650 回答
0

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

所以,要检查一个数字是偶数(完全被 2 整除),你做

$odd = $number%2;

为了使其成为一个完整的答案,您在循环中使用此标准(不知道如何做到这一点):

for($i=0; $i<count($array)-1;$i++){
  if($i%5==0) { $str .= $array[$i]; }
}
于 2013-03-21T21:01:30.630 回答
0

两种不同的方法:遍历所有条目并使用 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]
于 2013-03-21T21:03:27.400 回答
0

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

于 2013-03-21T21:04:51.153 回答
0

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

如果您需要不同的进展,您需要回答这个问题:如何使用先前的值计算下一个值?然后你可以建立一个算法来完成这项工作。

希望这对您有所帮助。

于 2013-03-21T21:08:04.290 回答
0
foreach( array_chunk( $array, 7) as $row) {
    echo $row[1] . ' , ' . $row[2] . ' , ' . $row[4] . "\n";
}
于 2013-03-21T21:27:51.043 回答