【问题标题】:Dealing With Large If Statements? - PHP处理大型 If 语句? - PHP
【发布时间】:2015-08-26 18:57:56
【问题描述】:

我正在编写一个包含 2 个基本输入标签的脚本。当您选择一个季节时,其中一个命名为“季节”,另一个命名为“情节”,例如第 2 季将通过使用 Java 脚本将显示样式更改为阻止来显示 Episode 输入标签。然后,您对 Episode 输入标签执行相同操作,但这次它显示一个带有点击事件链接的按钮。

我试图让添加到每个按钮的链接变得更加容易。目前我已经设置好了,因此 MySQL 中有 30 个“dls1e”部分,其中包含下载链接。

我遇到的问题是,为此编写大量的 if 语句是一件非常痛苦的事情。

代码:

//Season Changer Script
if($seasonscript!='') {echo $seasonscript;} else {echo '<p>An error has occured. (Error: #01 - No season script is present for this show.)</p>';}

//Episodes Script
if($episodescript!='') {echo $episodescript;} else {echo '<p>An error has occured. (Error: #02 - No episode script is present for this show.)</p>';}

//720p Download Buttons
//if($l720p!='') {echo $l720p;}

?>

<form method="POST" action="" class="pure-form" style="color: #000;">

<fieldset class="pure-group">
<h2 style="color: #fff; display:inline-block">Season</h2>
<select style="display: inline-block; width: 50%;" id="selectseason" onchange="javascript:seasonChange()">
<?php if($seasoncount!='') {echo $seasoncount;} else {echo '<option>There are no seasons ready for this TV Show.</option>';} ?>
</select>
</fieldset>

<?php
if($episodescript = 'Season1') {
echo '<fieldset style="display: none;" id="season1episodes" class="pure-group">';
echo '<h2 style="color: #fff; display:inline-block">Episode</h2>';
echo '<select style="display: inline-block; width: 50%;" id="selectseason1episode" onload="javascript:season1episodesChange()" onchange="javascript:season1episodesChange()">'.$season1episodes.'</select>';
echo '<span id="s1buttons">';

if($dls1e1 != '') {echo '<button id="season1episode1" type="button" onclick="window.open(\'http://example.com?url='.$dls1e1.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 1</button>';}

if($dls1e2 != '') {echo '<button id="season1episode2" type="button" onclick="window.open(\'http://example.com?url='.$dls1e2.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 2</button>';}

if($dls1e3 != '') {echo '<button id="season1episode3" type="button" onclick="window.open(\'http://example.com?url='.$dls1e3.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 3</button>';}

if($dls1e4 != '') {echo '<button id="season1episode4" type="button" onclick="window.open(\'http://example.com?url='.$dls1e4.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 4</button>';}

if($dls1e5 != '') {echo '<button id="season1episode5" type="button" onclick="window.open(\'http://example.com?url='.$dls1e5.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 5</button>';}

if($dls1e6 != '') {echo '<button id="season1episode6" type="button" onclick="window.open(\'http://example.com?url='.$dls1e6.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 6</button>';}

if($dls1e7 != '') {echo '<button id="season1episode7" type="button" onclick="window.open(\'http://example.com?url='.$dls1e7.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 7</button>';}

if($dls1e8 != '') {echo '<button id="season1episode8" type="button" onclick="window.open(\'http://example.com?url='.$dls1e8.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 8</button>';}

if($dls1e9 != '') {echo '<button id="season1episode9" type="button" onclick="window.open(\'http://example.com?url='.$dls1e9.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 9</button>';}

if($dls1e10 != '') {echo '<button id="season1episode10" type="button" onclick="window.open(\'http://example.com?url='.$dls1e10.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 10</button>';}

if($dls1e11 != '') {echo '<button id="season1episode11" type="button" onclick="window.open(\'http://example.com?url='.$dls1e11.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 11</button>';}

if($dls1e12 != '') {echo '<button id="season1episode12" type="button" onclick="window.open(\'http://example.com?url='.$dls1e12.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 12</button>';}

if($dls1e13 != '') {echo '<button id="season1episode13" type="button" onclick="window.open(\'http://example.com?url='.$dls1e13.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 13</button>';}

if($dls1e14 != '') {echo '<button id="season1episode14" type="button" onclick="window.open(\'http://example.com?url='.$dls1e14.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 14</button>';}

if($dls1e15 != '') {echo '<button id="season1episode15" type="button" onclick="window.open(\'http://example.com?url='.$dls1e15.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 15</button>';}

if($dls1e16 != '') {echo '<button id="season1episode16" type="button" onclick="window.open(\'http://example.com?url='.$dls1e16.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 16</button>';}

if($dls1e17 != '') {echo '<button id="season1episode17" type="button" onclick="window.open(\'http://example.com?url='.$dls1e17.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 17</button>';}

if($dls1e18 != '') {echo '<button id="season1episode18" type="button" onclick="window.open(\'http://example.com?url='.$dls1e18.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 18</button>';}

if($dls1e19 != '') {echo '<button id="season1episode19" type="button" onclick="window.open(\'http://example.com?url='.$dls1e19.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode 19</button>';}

echo '</span></fieldset>';
}
?>
</form>

从代码中可以看出,我强制使用 30 个 if 语句来检查 dls1e 中是否有下载链接,如果有,则输出一个按钮并附加一个链接。

有没有办法让它检查使用更少的 if 语句或能够使用更少的 MySQL 列来将不同的链接应用于不同的按钮?

大约 2 到 3 个月前,我有一个脚本为我执行此操作,但不知道发生了什么事,我找不到从哪里得到它。

如果有人能帮我解决这个问题,我将不胜感激。

更新: 我删除了我拥有的 19 个 dls1e,并将我保留的第 30 个重命名为 s1episodes。如图所示:https://gyazo.com/aed3cd627f173f01c8871dd64ae7aa16

然后我在 s1episodes 上使用了 explode():

$s1ep = explode("~", $s1episodes);

所以现在 s1ep[0] 是链接 1 (dls1e1),s1ep[1] 是链接 2 (dls1e2) 等等,我现在只需要一个循环来基本上执行 19 个 if 语句正在执行的操作。

【问题讨论】:

  • 您可以使用一列并在其中放置一个包含所有信息的序列化数组,然后循环遍历它。
  • 或者您可以为此目的制作一张表,您只需要一个唯一的 ID 将条目连接到系列表中的一行。
  • 序列化是什么意思?我确实了解拥有一个可能会正常工作的数组。但我会等到其他人有任何解决方案。
  • 你应该弄清楚循环是如何工作的 :-)

标签: php html mysql


【解决方案1】:

最后我不明白你的问题是什么:-( :-)

但是要去掉 19 IFs(为什么你在帖子里写了 30?)你可以用常规循环替换它:

for ($i=1;$i<=19; $i++) {
    if(${'dls1e'.$i} != '') {
       echo '<button id="season1episode'.$i.'" type="button" onclick="window.open(\'http://example.com?url='.$dls1e.$i.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode '.$i.'</button>';
    }
}

更新

foreach ($s1ep as $key=>$value ) {
   echo '<button id="season1episode'.($key+1).'" type="button" onclick="window.open(\'http://example.com?url='.$value.'&ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;">Download Episode '.($key+1).'</button>';
}

【讨论】:

  • 我只有 19 个,只是作为一个例子,它可以得到多大 xD 不想只是垃圾邮件。无论如何这可能会起作用,但我找到了一种不同的方法,但你似乎知道循环所以请用这种方法帮助我。基本上我现在发现,如果我使用explode(),我可以把它从30个dls1e变成只有1个(我重命名为s1episodes),然后我可以做s1ep[0],这会给我剧集的链接1 然后做 s1ep[1] 给我链接 2 e.t.c 但我仍然必须使用 30 如果你能为此编写一个循环吗?代码:$s1ep = explode("~", $s1episodes);
  • 对不起,我还是什么都不懂。您能否尝试使用一些 php 代码示例更新您的帖子,以描述您遇到的问题。
  • 我从 mysql 中删除了 30 个 dls1e 中的 29 个,然后将最后一个重命名为 s1episodes。然后把我所有的链接都放进去,用~分隔。我对此应用了 explode() ,现在 s1ep[0] 是第一个链接, s1ep[1] 是下一个链接等,所以现在我该怎么做:for ($i=0;$i&lt;=30; $i++) { if(${'s1ep['.$i.']'} != '') { echo '&lt;button id="season1episode'.$i.'" type="button" onclick="window.open(\'http://example.com?url='.$s1ep[.$i.].'&amp;ref='.$imdbid.'\');" class="pure-button pure-input-1-2 pure-button-primary" style="display: none;"&gt;Download Episode '.$i.'&lt;/button&gt;'; } }
  • 1st - 我已要求您编辑/更新您的帖子,而不是在这里发表评论。 2nd 你为什么把你的代码改成explode 什么的? 3rd - 我在您最初发布的代码中没有看到 explode4th您已将变量 $dls1e1 更改为 $s1p[1], $dls1e2 $s1p[2] 等等。如果我的猜测是正确的——告诉我,我会稍微更新一下我的答案。
  • 第 1 - 对不起,我会在第 2 秒更新它,因为有 30 个 sql 列来做这么简单的事情是很痛苦的,使用爆炸允许我使用 1 个列,使它更容易。第三个是的,我只是在错误的更新中添加了它,在第 4 个不完全是我删除了 dls1e2 - dls1e30 并且只将 dls1e1 重命名为 s1episodes,然后在其上使用了 explode ,使我们的新变量 s1ep 不是 s1p ,因为它是一个来自explode如何工作的数组s1ep[0] 基本上是 dls1ep1,s1ep[1] 是 dls1ep2。明白了吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-17
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多