【问题标题】:How do I perform an additional action only on the first iteration of a loop?如何仅在循环的第一次迭代时执行附加操作?
【发布时间】:2009-08-29 20:03:57
【问题描述】:

我知道该怎么做...我将在下面给出示例代码。但我无法摆脱这样一种感觉,即有一种聪明的方法可以在不使用 $isfirstloop 之类的变量的情况下完成我想做的事情。

$isfirstloop = true;
foreach($arrayname as $value) {
 if ($isfirstloop) {
  dosomethingspecial();
  $isfirstloop = false;
 }
 dosomething();
}

有没有办法只在第一个循环上执行dosomethingspecial(),而在每个循环上执行dosomething(),而不引入像$isfirstloop这样的变量?

谢谢!

【问题讨论】:

    标签: php loops


    【解决方案1】:

    如果我遗漏了什么,请原谅我,但为什么不在循环之前做你想做的事情呢?

    dosomethingspecial();
    foreach($arrayname as $value) {
     dosomething();
    }
    

    【讨论】:

    • 如果你需要 doSomethingSpecial() 的第一个元素,你可以使用例如reset($arrayname) (如果可以在循环之前重置数组)
    • dosomethingspecial() 将始终被调用,无论 $arrayname 数组是否填充了元素,我假设他至少希望在它至少填充一个元素时调用它。
    • 是的,如果您考虑到 VolkerK 的评论。
    【解决方案2】:
    foreach ($arr as $i => $val)
    {
      if ($i == 0) { doSomethingSpecial(); } // Only happens once.
      doSomething(); // Happens every time.
    }
    

    【讨论】:

    • +1 我会怎么做,当然如果它是一个关联数组,这是行不通的,因为你会得到键而不是索引。
    • 您必须假设数组编号为第一个键为零。考虑一个未设置 0 元素的数组。
    • 正是我想要的。这似乎很简单,但我从来没有想出它。非常感谢!
    【解决方案3】:

    嗯...你可以reset数组然后看看你是否在第一个键上:

    reset($a); foreach($a as $k => $v) {
        if(key($a)==$k) doIt();
    }
    

    【讨论】:

      【解决方案4】:
      $count = count( $arr );
      
      for ( $i = 0; $i < $count; $i++ ) {
          if ( $i == 0 ) { dosomethingspecial(); }
          doSomething();
      }
      

      【讨论】:

      • 非常适合关联数组或不连续编号的数组。
      【解决方案5】:
      $elem = reset($arrayname);
      dosomethingspecial();
      while( ($elem = next($arrayname)) !== FALSE ) {
        dosomething();
      }
      

      【讨论】:

        【解决方案6】:

        您没有从其他方法中获得任何性能。你的方法很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-07
          • 2019-12-19
          • 2020-07-02
          • 2016-06-19
          • 2016-08-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多