任何人都可以给我一些建议,让我的for循环更有效率吗?

时间:2010-12-20 16:55:44

标签: php wordpress loops performance for-loop

所以我有这个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/";
    }
}

5 个答案:

答案 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)

我的建议是尝试使用数据结构,并将所有这些值放在与数据结构相同类型的数组中。这样,如果您以后需要使用相同的数字 - 值关系再次访问值,则不必像在此处那样重新定义所有内容。您只需要使用数组索引来访问值。