【问题标题】:error in else if rows? Is there a more concise way of writing this?else if 行中的错误?有没有更简洁的写法?
【发布时间】:2012-11-05 23:22:53
【问题描述】:

我的代码从数据库中选择,写出信息然后运行一个 else if 循环来决定输出什么代码:

<?php

echo '<p>the loop<p><br>
 <p>Accreditations</p>';

      if ($fields['accreditations1']==1){echo 'HTML CODE 1';} else { 
      if ($fields['accreditations1']==2){echo 'HTML CODE 2';} else { 
      if ($fields['accreditations1']==3){echo 'HTML CODE 3';} else { 
      if ($fields['accreditations1']==4){echo 'HTML CODE 4';} else { 
      if ($fields['accreditations1']==5){echo 'HTML CODE 5';} else { 
      if ($fields['accreditations1']==6){echo 'HTML CODE 6';} else { 
      if ($fields['accreditations1']==7){echo 'HTML CODE 7';} else { 
      if ($fields['accreditations1']==0){echo '';}

      if ($fields['accreditations2']==1){echo 'HTML CODE 1';} else { 
      if ($fields['accreditations2']==2){echo 'HTML CODE 2';} else { 
      if ($fields['accreditations2']==3){echo 'HTML CODE 3';} else { 
      if ($fields['accreditations2']==4){echo 'HTML CODE 4';} else { 
      if ($fields['accreditations2']==5){echo 'HTML CODE 5';} else { 
      if ($fields['accreditations2']==6){echo 'HTML CODE 6';} else { 
      if ($fields['accreditations2']==7){echo 'HTML CODE 7';} else { 
      if ($fields['accreditations2']==0){echo '';}

      if ($fields['accreditations3']==1){echo 'HTML CODE 1';} else { 
      if ($fields['accreditations3']==2){echo 'HTML CODE 2';} else { 
      if ($fields['accreditations3']==3){echo 'HTML CODE 3';} else { 
      if ($fields['accreditations3']==4){echo 'HTML CODE 4';} else { 
      if ($fields['accreditations3']==5){echo 'HTML CODE 5';} else { 
      if ($fields['accreditations3']==6){echo 'HTML CODE 6';} else { 
      if ($fields['accreditations3']==7){echo 'HTML CODE 7';} else { 
      if ($fields['accreditations3']==0){echo '';}

      echo '<br />';

      if ($fields['accreditations4']==1){echo 'HTML CODE 1';} else { 
      if ($fields['accreditations4']==2){echo 'HTML CODE 2';} else { 
      if ($fields['accreditations4']==3){echo 'HTML CODE 3';} else { 
      if ($fields['accreditations4']==4){echo 'HTML CODE 4';} else { 
      if ($fields['accreditations4']==5){echo 'HTML CODE 5';} else { 
      if ($fields['accreditations4']==6){echo 'HTML CODE 6';} else { 
      if ($fields['accreditations4']==7){echo 'HTML CODE 7';} else { 
      if ($fields['accreditations4']==0){echo '';}

      if ($fields['accreditations5']==1){echo 'HTML CODE 1';} else { 
      if ($fields['accreditations5']==2){echo 'HTML CODE 2';} else { 
      if ($fields['accreditations5']==3){echo 'HTML CODE 3';} else { 
      if ($fields['accreditations5']==4){echo 'HTML CODE 4';} else { 
      if ($fields['accreditations5']==5){echo 'HTML CODE 5';} else { 
      if ($fields['accreditations5']==6){echo 'HTML CODE 6';} else { 
      if ($fields['accreditations5']==7){echo 'HTML CODE 7';} else { 
      if ($fields['accreditations5']==0){echo '';}

      if ($fields['accreditations6']==1){echo 'HTML CODE 1';} else { 
      if ($fields['accreditations6']==2){echo 'HTML CODE 2';} else { 
      if ($fields['accreditations6']==3){echo 'HTML CODE 3';} else { 
      if ($fields['accreditations6']==4){echo 'HTML CODE 4';} else { 
      if ($fields['accreditations6']==5){echo 'HTML CODE 5';} else { 
      if ($fields['accreditations6']==6){echo 'HTML CODE 6';} else { 
      if ($fields['accreditations6']==7){echo 'HTML CODE 7';} else { 
      if ($fields['accreditations6']==0){echo '';}

      ?> 

首先我需要做些什么来关闭 ifs 吗?还有更短的方法吗?

【问题讨论】:

  • 看得见的就看不见了……确实,打字速度快的人为什么还要使用函数呢?
  • 护目镜他们什么都不做!考虑改用switch

标签: php if-statement


【解决方案1】:

使用switch statement,像这样

switch( $fields['accreditations1'] ) {
  case 1: echo 'HTML CODE 1'; break;
  case 2: echo 'HTML CODE 2'; break;
  case 3: echo 'HTML CODE 3'; break;
  case 4: echo 'HTML CODE 4'; break;
  case 5: echo 'HTML CODE 5'; break;
  case 6: echo 'HTML CODE 6'; break;
  case 7: echo 'HTML CODE 7'; break;
  case 0: echo '';
}

我认为,这不是实际的输出。如果我弄错了,您应该考虑为此编写一个单独的函数!

【讨论】:

  • 事实上,如果它确实是 OMG OMG 1、2、3 等...字符串来回显,即使 switch 也将被视为 DailyWTF 材料 - 但当然比问题中给出的要差得多.
【解决方案2】:

试试这个,使用for循环,

 for( $i=1; $i<=count($fields); $i++) {
   if( $fields['accreditations'.$i] > 0 && $fields['accreditations'.$i] <= 7)
     echo 'HTML CODE ' $fields['accreditations'.$i];  
 }

【讨论】:

  • 但是如果那个表达式是8,例如呢? ) 严格来说,你必须检查&lt;= 7 才能完全匹配有问题的代码,我想。并且在该循环的中间还有一个
    ...
  • 是的,我想写这样的东西,但我怀疑所有这些 HTML 片段确实是这样。我认为这只是一个例子。
  • @raina77ow:同意,考虑到这是整个代码。
【解决方案3】:

我认为你在&lt;p&gt;Accreditations&lt;/p&gt; 之后的' 太多了。

除此之外,您还可以使用 switch 语句来缩短这段代码。

你也可以使用:

if (condition) {}
else if (othercondition) {}
elseif (thirdcondition {}
else {}

请注意,else 的 if 不在 else 的括号内。你可以写else if或者elseif,意思一样。

这在开关不起作用的情况下特别有用。在您的情况下,只需使用开关即可。

【讨论】:

  • 事实上,由于现在我有幸使用 5.3,有时我会在关联数组中表达开关('scenario1' =&gt; function() { behaviour1; } 等)。它允许以后重用代码。
  • @raina77ow 不错的技巧,但对这段代码没有任何帮助。
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2023-03-08
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多