php中数组的选择性迭代

php中数组的选择性迭代,php,arrays,loops,Php,Arrays,Loops,有没有一种方法可以遍历数组,但对其他元素执行操作? 例如,如果我有一个包含13个元素的数组,我如何只对元素2、4、6、8、10和12执行操作 for ($i=1; $i<sizeof($array); $i+=2) { // do stuff to $array[$i] } 注意:$i&1相当于$i%2==1或仅$i%2 注意:$i&1相当于$i%2==1或仅$i%2。要修复cletuses,请回答更多速度和修复打字错误: for ($i = 1, $j = count($array

有没有一种方法可以遍历数组,但对其他元素执行操作? 例如,如果我有一个包含13个元素的数组,我如何只对元素2、4、6、8、10和12执行操作

for ($i=1; $i<sizeof($array); $i+=2) {
  // do stuff to $array[$i]
}
注意:$i&1相当于$i%2==1或仅$i%2


注意:$i&1相当于$i%2==1或仅$i%2。

要修复cletuses,请回答更多速度和修复打字错误:

for ($i = 1, $j = count($array); $i < $j; $i += 2) {
    // code
}

要修复cletuses,请提高速度并修复打字错误:

for ($i = 1, $j = count($array); $i < $j; $i += 2) {
    // code
}

已经发布的答案的另一个变体。。。与菲尔·卡特的答案相似。如果数组具有数字索引,则可以在foreach中使用该索引,而不是管理单独的计数器变量:

foreach ($array as $i => $v) {
  if (! ($i % 2)) {
  // do stuff to $v
}

已经发布的答案的另一个变体。。。与菲尔·卡特的答案相似。如果数组具有数字索引,则可以在foreach中使用该索引,而不是管理单独的计数器变量:

foreach ($array as $i => $v) {
  if (! ($i % 2)) {
  // do stuff to $v
}


从中我学到了一些东西,我不知道在第一个表达式或后续表达式中可以指定多个变量。谢谢速度充其量,缓存阵列大小是微观优化。它在语义上也是等价的。如果在循环过程中数组大小发生变化怎么办?@phil,np。很高兴为您提供帮助:@cletus,如果您的数组在循环过程中发生变化,您应该在循环中使用foreach或update$j。这是一个速度优化,也是一个有效的优化。想象一个1000000个值的数组,你就会明白我的意思。从中我学到了一些东西,我不知道你可以在第一个表达式或后续表达式中指定多个变量。谢谢速度充其量,缓存阵列大小是微观优化。它在语义上也是等价的。如果在循环过程中数组大小发生变化怎么办?@phil,np。很高兴为您提供帮助:@cletus,如果您的数组在循环过程中发生变化,您应该在循环中使用foreach或update$j。这是一个速度优化,也是一个有效的优化。想象一个1000000个值的数组,你就会明白我的意思了。语句的最后一部分应该是$i+=2吗?我不确定我是否得到了foreach示例。你能简单一点解释给我听吗?!基本上,foreach循环与普通for循环不同,它没有索引计数器,因此$i被用作代理索引。每次迭代它都会递增$对于值1、3、5、7,i&1将返回true。它从0开始,因此每秒钟都返回true,这意味着跳过它们。不应将sizeof$array置于循环条件中。这将计算$array N+1的大小,其中N是循环数。语句的最后一部分是否应为$i+=2?我不确定是否得到foreach示例。你能简单一点解释给我听吗?!基本上,foreach循环与普通for循环不同,它没有索引计数器,因此$i被用作代理索引。每次迭代它都会递增$对于值1、3、5、7,i&1将返回true。它从0开始,因此每秒钟都返回true,这意味着跳过它们。不应将sizeof$array置于循环条件中。这将计算$array的大小N+1倍,其中N是循环的数量。这就是我要做的,除了大括号。逻辑非常简单,这很好地反映了这一点,而且它可以很容易地使用else进行扩展,而无需重写循环逻辑。我可以添加一个真实世界的示例吗?我有一个数组,一周中每天有2个元素。从0开始编号。我想要一个循环,它将在每天做一些事情,而不是在每个元素上。我如何使用你给出的答案来实现这一点?PS:现在还没有代码发布,我只是想先解决它!!!如果您的数组看起来太相似,$array=array'mon1'、'mon2'、'tue1'、'tue2'…'fri2';并且始终遵循不同的模式,然后您可以在编写代码时使用该代码。如果你想确保它每天都能成功,你需要以某种方式验证它。很难说不知道到底要进什么和要出什么。这就是我要做的,除了牙套。逻辑非常简单,这很好地反映了这一点,而且它可以很容易地使用else进行扩展,而无需重写循环逻辑。我可以添加一个真实世界的示例吗?我有一个数组,一周中每天有2个元素。从0开始编号。我想要一个循环,它将在每天做一些事情,而不是在每个元素上。我如何使用你给出的答案来实现这一点?PS:现在还没有代码发布,我只是想先解决它!!!如果您的数组看起来太相似,$array=array'mon1'、'mon2'、'tue1'、'tue2'…'fri2';并且始终遵循不同的模式,然后您可以在编写代码时使用该代码。如果你想确保它每天都能成功,你需要以某种方式验证它。很难说不知道到底发生了什么,你想要什么。