所以我有这个for循环,里面有36个if-queries。有关提高效率的建议吗? 您可以查看完整代码here
以下是它的样子:
$numbers = range(1, 36);
shuffle($numbers);
for ($m =0; $m<37; $m++){
if ($numbers[$m] == "1"){
$mirza[$m] = "RUTHIE";
$mage[$m] = "3";
$mquote[$m] = "I get to learn a lot of new things here, like sign language!";
$link[$m] = "http://www.google.com";
}
if ($numbers[$m] == "2"){
$mirza[$m] = "AIDA";
$mage[$m] = "82";
$mquote[$m] = "This is like a club and I know and like all the members. It's good therapy.";
$link[$m] = "/about/";
}
if ($numbers[$m] == "3"){
$mirza[$m] = "AMIRE";
$mage[$m] = "4";
$mquote[$m] = "I am learning how to share and make friends.";
$link[$m] = "/about/";
}
}
答案 0 :(得分:3)
将if-s更改为具有适当中断的开关,甚至更糟糕的是if..elseif..etc将意味着并非所有ifs都必须进行评估。
答案 1 :(得分:2)
当你拥有这么多数据时,它确实应该在数据库(可能是XML或文档样式)或文本文件中。
不过,我将通过在一个地方对所有数据进行硬编码并消除对if或switch语句的需要来向您展示改进方法。您应该非常轻松地更改切换语句,最好还是在一个地方(下面)对所有数据进行硬编码,最好还是获取存储这些值的数据库或CSV文本文件。
$data = array(
array('mirza' => 'RUTHIE', 'mage' => '3', 'mquote' => 'I get to learn a lot of new things here, like sign language!', 'link' => 'http://www.google.com'),
array(......
);
$numbers = range(1, 36);
shuffle($numbers);
for ($m =0; $m<37; $m++){
$index = $numbers[$m];
$mirza[$m] = $data[$index]['mirza'];
$mage[$m] = $data[$index]['mage'];
$mquote[$m] = $data[$index]['mage'];
$link[$m] = $data[$index]['link'];
}
为了清楚起见,这里的'效率'问题不是速度快(尽管这种方式更快)。它所拥有的是维持和改变的噩梦。
您可能会更好地重新考虑应用的设计,特别是将mirza, mage, mquote, link
作为字段制作对象。
答案 2 :(得分:1)
你的问题是你觉得你只是有太多的“if”陈述吗?尝试一下switch语句。从技术上讲,你的循环尽可能高效(使用大O方法评估效率)。
for ($m =0; $m<37; $m++){
switch($numbers[$m])
{
case 1:
$mirza[$m] = "RUTHIE";
$mage[$m] = "3";
$mquote[$m] = "I get to learn a lot of new things here, like sign language!";
$link[$m] = "http://www.google.com";
break;
case 2:
$mirza[$m] = "AIDA";
$mage[$m] = "82";
$mquote[$m] = "This is like a club and I know and like all the members. It's good therapy.";
$link[$m] = "/about/";
break;
case 3:
$mirza[$m] = "AMIRE";
$mage[$m] = "4";
$mquote[$m] = "I am learning how to share and make friends.";
$link[$m] = "/about/";
break;
}
}
答案 3 :(得分:1)
我的猜测已经达到了你所需要的速度。
让它更快的唯一方法是查看基准测试PHP的网站,并调整这个或那个以便最有效的PHP内部。
由于PHP内部可能会随着时间的推移而发生变化(使用PHP更新),除非您经常对代码进行基准测试,否则我说您没有那么多,特别是代码很简单。
例如,您可以尝试更改
$numbers[$m] == "2"
带
$numbers[$m] === 2
或
$numbers[$m] === "2"
但是如果你没有对你的代码进行基准测试(比如将它放在一个函数中并测量超过10.000次迭代的执行时间),你就会对改进视而不见。 PHP内部速度并不总是像你期望的那样。
(关于switch语句的答案也是如此。尝试一下,但是基准测试!)
答案 4 :(得分:0)
我的建议是尝试使用数据结构,并将所有这些值放在与数据结构相同类型的数组中。这样,如果您以后需要使用相同的数字 - 值关系再次访问值,则不必像在此处那样重新定义所有内容。您只需要使用数组索引来访问值。