Php 如何对阵列中的第2、第3和第5个元素进行操作?
我有一个非常简单的索引数组:Php 如何对阵列中的第2、第3和第5个元素进行操作?,php,arrays,loops,Php,Arrays,Loops,我有一个非常简单的索引数组: 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
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
上的操作,但我无法将我的小脑袋缠绕在我需要的循环/计数器上,所以只要朝正确的方向轻推一下就好了
为清楚起见,给定上述数组,my$str
的结果如下所示:
Buster Posey, SF, 16.60
Joe Mauer, Min, 57.60
这是数组的第二、第三和第五个元素,其中添加了两个逗号和一个换行符,以便在数组中进行良好的测量,并在整个数组中重复
编辑:
我的问题有个错误。下面的评论是正确的。他们七人一组,所以我需要每第二、第三和第五个元素,然后跳过第二个,重新开始这个过程。我将按照建议使用。谢谢所有的答案。您需要使用模运算符(
%
)。它返回一个数字除法的剩余部分,并经常用于检查一个数字是否是另一个数字的倍数
所以,要检查一个数是否为偶数(正好可以被2整除),您需要
$odd = $number%2;
要使其成为一个完整的答案,请在循环中使用此条件(如果没有条件,则不知道如何操作):
类似这样的($i=0;$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]
对于($i=0;$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;
对于(i=2,我想你甚至需要一个循环吗?如果你需要一个循环,那么你正在考虑某种级数……你正在考虑的级数是:2,3,5,…,n[i]=n[i-1]+n[i-2]
?我不确定。没有循环,你将如何实现它?为什么不使用来正确地分组相关值(看起来每个7块都是一个组)然后你可以访问每个数组的偏移量1、2和4。非常好,nickb。我来试一试。@Jeff-你可以看到它在工作,它会产生精确的输出。是的,它很完美。谢谢!
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]]);
}
foreach( array_chunk( $array, 7) as $row) {
echo $row[1] . ' , ' . $row[2] . ' , ' . $row[4] . "\n";
}