2013-03-21 112 views
0

我有一个非常简单的索引数组:如何操作数组中的每个第2,第3和第5个元素?

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并开始整个过程​​。按照建议,我将使用array_chunk。感谢所有的答案。

+1

你甚至需要一个循环? – 2013-03-21 20:59:07

+0

如果你需要一个循环,那么你正在考虑某种进展......你正在考虑的进程:'2,3,5,...,n [i] = n [i-1 ] + n [i-2]'? – Barranka 2013-03-21 21:00:56

+0

我不确定。你如何在没有循环的情况下完成它? – Jeff 2013-03-21 21:01:34

回答

0
foreach(array_chunk($array, 7) as $row) { 
    echo $row[1] . ' , ' . $row[2] . ' , ' . $row[4] . "\n"; 
} 
+0

非常好,nickb。我会给这个旋转。 – Jeff 2013-03-21 21:29:02

+0

@Jeff - 你可以看到它在[这个演示](http://codepad.org/dq64Vnnc)中工作,它会产生你的确切输出。 – nickb 2013-03-21 21:35:45

+0

是的,这是完美的。谢谢! – Jeff 2013-03-21 21:37:40

0

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

因此,要检查是一个数字为偶数(恰好能被2整除),你做

$odd = $number%2; 

要使它成为一个完整的答案,你用这个标准在循环中(不知道如何这样做没有一个):

for($i=0; $i<count($array)-1;$i++){ 
    if($i%5==0) { $str .= $array[$i]; } 
} 
1

这样的事情?

$i = 0; 

foreach($array as $value) { 
    if ($i++ % 2 == 0 || $i++ % 3 == 0 || $i++ % 5 == 0) { 
     echo $value; 
    } 
} 
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] 
0

你需要采取与步骤2-1-2,2-1-2序列。你可以用双循环,循环+情况来做到这一点...

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

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

希望这可以帮助你。

相关问题