将if / elseif语句合并到一个php中

时间:2014-08-05 16:57:14

标签: php loops if-statement

我有以下代码,几乎一直都是相同的(大约50次):

if ($product=='product1' || $product=='product1 + extra')
{
 mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires)VALUES ('{$strKey}', 'test.zip', '".(time()+(60*60*24*7))."')"); 
}
else if ($product=='product2' || $product=='product2 + extra')
{
 mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires)VALUES ('{$strKey}', 'test2.zip', '".(time()+(60*60*24*7))."')"); 
}
//else if () {}

唯一改变的是产品和文件名(product1,product2,ecc .. + test.zip,test2.zip,ecc ......)。

所以我考虑使用产品名称和文件名制作两个数组,然后循环遍历这些数组,但我不知道它是否可行以及如何正确更改代码。

有人知道一个好的解决方案吗?

感谢您的帮助和对不起我的英语,这并不完美。

修改

product1,product2,ecc,test1.zip,test2.zip,ecc。只是正在变化的真实姓名的占位符,它们总是不同的。

product1,product2来自$ _POST,它是通过某些选项从用户中选择的。

2 个答案:

答案 0 :(得分:2)

大概你想要的东西如下......

$count = 50;//This should be set using something such as count() on an object.
$i = 0;

while ($i<$count)
{
 if ($product=='product'.$i || $product=='product'.$i.' + extra')
 {
  $filename1 = strrev($product);
  $file = explode('.',$filename,2);
  $file_name = mysqli_real_escape_string($GLOBALS["___mysqli_ston"],strrev($file[1]));
  $file_ext = mysqli_real_escape_string($GLOBALS["___mysqli_ston"],strrev($file[0]));
  mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires) VALUES ('{$strKey}', $file_name.$i.'.'.$file_ext, '".(time()+(60*60*24*7))."')"); 
 }

 $i++;
}

您必须确保将$count分配给确定您要处理的项目数量的内容。同时确保while循环迭代尽可能多的项目(有些人最终想知道为什么最后一项没有处理。如果你提供了更多的代码,我能够给你虽然我认为您可以从此处处理此问题,但请确保您在INSERT次查询中转发数据,同样您只提供了有限的数量虽然确保您的代码安全非常重要,但您可能已经 转义代码。最后,您可能需要将$i更改为1而不是0更主观你的编号方案。

答案 1 :(得分:1)

我找到了自己的解决方案:

$files = array(
'product1' => 'test.zip',
'product2' => 'test2.zip'
//other products and files
 );

创建数组后,创建一个像

这样的循环就足够了
foreach($files as $file => $name){
if($product == $file || $product == $file . ' + extra' ){
mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires) VALUES ('{$strKey}', '$name', '".(time()+(60*60*24*7))."')"); 
}
};