【问题标题】:Is there a more efficient way to match multiple variables in PHP?有没有更有效的方法来匹配 PHP 中的多个变量?
【发布时间】:2010-12-20 01:58:14
【问题描述】:

目前,我有 36 个变量正在被洗牌(出于一个非常具体的 WP 原因)。无论如何,一旦变量洗牌,我试图将它们与名称匹配。因此,如果 $numbers[0] 等于假设 1,那么它应该打印“John”。我目前正在使用 36 个 switch case 语句来实现这一点,我知道这是非常低效的。所以我想知道是否有更聪明的方法来做到这一点?

这是我的代码(例如,我只显示 3 个变量和 3 个开关案例):

$numbers = range(1, 3);shuffle($numbers);   
switch ($numbers[0]){
    case "1":
        echo $numbers[0] . " is John";
        break;
    case "2":
        echo $numbers[0] . " is Jane";
        break;  
    case "3":
        echo $numbers[0] . " is Mirza";
        break;  
}
switch ($numbers[1]){
    case "1":
        echo $numbers[1] . " is John";
        break;
    case "2":
        echo $numbers[1] . " is Jane";
        break;  
    case "3":
        echo $numbers[1] . " is Mirza";
        break;  
}
switch ($numbers[2]){
    case "1":
        echo $numbers[2] . " is John";
        break;
    case "2":
        echo $numbers[2] . " is Jane";
        break;  
    case "3":
        echo $numbers[2] . " is Mirza";
        break;      
}

【问题讨论】:

    标签: php loops performance switch-statement


    【解决方案1】:

    先把所有的名字写成一个数组:

    $names = array(
        0 => 'John',
        1 => 'Jane',
        2 => 'Mirza'
    );
    

    之后使用 foreach:

    foreach($numbers as $number){
        echo $names[$number];
    }
    

    很简单,祝你好运! :)

    【讨论】:

      【解决方案2】:

      不太确定你的目标是什么;你的例子有点抽象。但是你可以做两件事:

       // loop
       foreach ($numbers as $n) {
           switch($n) { ... }
       }
      

      然后,如果比较总是针对静态列表,请避免使用 switch 语句:

       $compare = array("", "John", "Jane", "Mirza");
      
       // loop
           print $compare[n];
      

      【讨论】:

      • 我认为 in_array() 我认为会更快......他可以加载数组中的值并将其与每个子数组进行比较。
      【解决方案3】:

      这样的事情应该可以拯救你的一天:

      $theCase =  array ( " is John", " is Jane", " is Mirza");
      $numbers = range(1, 3);shuffle($numbers);     
      for ($i=0;$i<3;$i++)
          echo $numbers[$i] . $theCase[$numbers[$i]];
      

      【讨论】:

        猜你喜欢
        • 2017-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-29
        • 2020-02-26
        相关资源
        最近更新 更多