【问题标题】:Clever way to do for loop () ? PHP [closed]聪明的方法来做 for loop() ? PHP [关闭]
【发布时间】:2011-08-06 15:26:20
【问题描述】:

我正在寻找是否有一种智能或最佳的方法来尝试执行此 for 循环,但到目前为止我无法让它工作。

我正在尝试这样做以阻止我重复代码,但是如果不可能,那么我将不得不重复代码。

这是我尝试过的

if(!isset($staff_rows)
for ($i=0; $i < 5; $i++)
else
for ($i=0; $i < $staff_rows; $i++)

所以基本上我希望我的 forloop 使用一个变量 $staff_rows 如果它被设置,否则只使用默认值 5。

这是错误信息

解析错误:语法错误,意外的 T_FOR

有什么想法吗?

谢谢

【问题讨论】:

  • 你会错过一个 )。它应该是 if ( !isset($staff_rows) )
  • 为什么每个人都在否定这一点 - 这是一个完全合法的问题
  • 那个东西叫做变量,因为你可以改变它的值。

标签: php for-loop


【解决方案1】:

最简单的方法。

        $staff_rows = 5;

        // your code to change staff_rows 

        for ($i=0; $i <  $staff_rows; $i++) {
          // do something
        }

【讨论】:

  • 我选择了这个作为答案,因为它逻辑简单且优雅!
【解决方案2】:
$min = (isset($staff_rows)) ? $staff_rows : 5 ;
for ($i=0; $i < $min; $i++) {
  //loop logic
}

【讨论】:

  • 为什么会出现这个错误?当然,您必须稍后启动 { 并循环逻辑...
  • 您没有在 for() 条件下比较 $i。你只是在定义和增加。
【解决方案3】:

将您的代码重写为以下内容:

$limit = 5;
if (isset($staff_rows)) {
    $limit = $staff_rows;
}
for ($i=0; $i < $limit; $i++) { }

您的代码使用大括号也会更清晰。此外,您在问题中的代码示例中缺少右括号。

【讨论】:

  • 是的,但这意味着我将重复代码,因为我必须将我的所有回声都放在它们的大括号内的两个 for 循环中。
  • 这根本没有回答 OP 的问题。
  • @sqlmole 如果代码在各个循环中相同,请将其移至函数中。
  • @AlienWebguy 现在可以了
  • 我的视图中不能有函数。我正在使用 MVC 的 Codeigniter 框架!视图内不允许使用任何功能
【解决方案4】:
for($i=0,$s=(isset($staff_rows)?$staff_rows:5);$i<$s;++$i) //do

添加:
更多关于三元运算符:
What is ?: in PHP 5.3?

gion_13 回答中的一些 benchmark.Manual 页面

$array=range(1,1000000);
$i=17;

$start= microtime(true);
$s=sizeof($array);
for($i=0;$i<$s;++$i){
;
}
print microtime(true)-$start;
print chr(10);



$start= microtime(true);
for($i=0,$s=sizeof($array);$i<$s;++$i){
;
}
print microtime(true)-$start;
print chr(10);

$start= microtime(true);
for($i=0;$i<sizeof($array);++$i){
;
}
print microtime(true)-$start;
print chr(10);

输出

0.18430280685425
0.1843409538269
1.3922038078308

【讨论】:

  • 谢谢 什么是 min() 函数?这是否选择了最可用的值?
  • @sqlmole,我弄错了。你不需要 min() 这里
  • @AlienWebguy,它不在状态。它将计算 1 次。
  • @Alien haha​​,“for ($i=0; $i
  • 感谢劫持我的问题 - 这个函数并不优雅,如果稍后需要对系统进行维护,则很难阅读,但谢谢你:)
【解决方案5】:

除了缺少“)”这一事实之外,您还可以执行一个 for 循环:

for($i=0,$l=isset($staff_rows)?$staff_rows:5;$i<$l;$i++){
    // do your thing
}

它很有效,因为您只使用了一个for-loop。
我在循环中使用了逻辑($l=isset($staff_rows)?$staff_rows:5;)这一事实不会影响它的执行......但不要相信我的话:
来自php.net 文档:

for (expr1; expr2; expr3)
    statement

“第一个表达式 (expr1) 在循环开始时无条件地计算(执行)一次。”

【讨论】:

  • @Alien 看不懂这段代码,不代表代码不好
  • @Matt:请先想想你在写什么。这个网站是 sh1t。
  • 我没有选择这个函数,虽然它很聪明 - (a) 因为它不能轻易分离两个单独函数的逻辑并且 (b) 很难调试这是有错误价值等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多