【问题标题】:How to operate on every 2nd, 3rd and 5th element in an array?如何对数组中的每个第 2、第 3 和第 5 个元素进行操作?
【发布时间】:2013-03-21 20:58:32
【问题描述】:

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

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

这是数组的第二个、第三个和第五个元素,加上几个逗号和一个换行符,以便在整个数组中重复。

编辑:

我的问题有误。下面salathe的评论是正确的。它们以七个为一组,所以我需要每个第 2、第 3 和第 5 个元素,然后跳过 2 并重新开始该过程。按照建议,我将使用array_chunk。谢谢大家的回答。

【问题讨论】:

  • 你还需要循环吗?
  • 如果您需要循环,那么您正在考虑某种进展……您正在考虑的进展是:2, 3, 5, ... , n[i] = n[i-1] + n[i-2]?
  • 我不确定。如果没有循环,你将如何完成它?
  • 为什么不使用 array_chunk() 正确地对相关值进行分组(看起来每个 7 块都是一个组)然后您可以访问每个数组的偏移量 1、2 和 4。跨度>

标签: php arrays loops


【解决方案1】:

这样的?

$i = 0;

foreach($array as $value) {
    if ($i++ % 2 == 0 || $i++ % 3 == 0 || $i++ % 5 == 0) {
        echo $value;
    }
}

【讨论】:

    【解决方案2】:
    foreach( array_chunk( $array, 7) as $row) {
        echo $row[1] . ' , ' . $row[2] . ' , ' . $row[4] . "\n";
    }
    

    【讨论】:

    • 非常好,nickb。我会试一试。
    • @Jeff - 你可以看到它在 this demo 中工作,它会产生你的准确输出。
    • 是的,非常完美。谢谢!
    【解决方案3】:

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

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

    $odd = $number%2;
    

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

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

    【讨论】:

      【解决方案4】:

      两种不同的方法:遍历所有条目并使用 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]
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          希望对你有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-10-01
            • 1970-01-01
            • 2023-03-12
            • 2021-05-31
            相关资源
            最近更新 更多