从PHP Switch语句中添加值的正确方法?

时间:2013-12-12 21:18:44

标签: php switch-statement

我希望在我的switch语句中采取下一步。我需要保留从case语句生成的两条信息(知道字母是否是元音并知道它的数值)。然后我需要添加由以下函数生成的值,但无法通过研究或教程找出如何执行此操作。我创建了一个看起来像数组的字符串,但我不认为这是最好的方法。

    $firstName = strtoupper("Abc");
    $firstNamesArray = str_split($firstName);
    $string = "(";

    foreach ($firstNamesArray as $value) {
        $newValue = (getLetter($value)) . " ";

        $string .=$newValue;

        }
     echo "<br>";
     $string .=")";
     echo $string;

     function getLetter($letter) {
         switch ($letter) :
         case  "A": 
             return '"V" => 1'; break;
         case  "B": 
             return '"C" => 2'; break;
         case  "C": 
             return '"C" => 3'; break;
         default: 
             return 'This is not a valid selection';
         endswitch;
         } 

我想添加值1 + 2 + 3(案例返回值的第二部分)。

感谢您的建议/协助!

2 个答案:

答案 0 :(得分:1)

修改你的getLetter()函数,使它返回一个数组:

function getLetter($letter) {
    switch ($letter) :
        case  "A": 
            return array('v', 1);
            break;
        case  "B": 
            return array('c', 2);
            break;
        case  "C": 
            return array('c', 3);
            break;
        default: 
            return false;
    endswitch;
}
$firstName = strtoupper("Abcd");
$firstNamesArray = str_split($firstName);
$letters = '';
$numbers = 0;
foreach ($firstNamesArray as $value) {
    $data = getLetter($value);
    if ( is_array($data) ) {
        /**
         *  Append the first value of the array to $letters
         */
        if ( isset($data[0]) ) {
            $letters .= $data[0];
        }
        /**
         *  Add the second value of the array to $numbers
         */
        if ( isset($data[1]) ) {
            $numbers += $data[1];
        }
    } else {
        /**
         *  Nothing found in switch, so returned false
         */ 
    }

}

$ letters现在是“vcc”,$ numbers是“6”。这些都是例子。

请注意,您可以进行少量更改,并在交换机内返回包含键和值的数组。或者你可以返回一个多维数组。决定什么最适合你!

答案 1 :(得分:0)

你的方法并不是很干净,你应该避免这样的事情,因为它很难处理。

我会使用两种可能的方法中的一种,取决于你将要使用它的用途,或者你感觉更容易使用的方法。

方法1.使用PHP对象

您定义了一个类,并且在每种情况下,您都创建了一个对象并将其放入数组

class Letter
{

    public $value;
    public $type;


    public  __construct($type, $value) {
        $this->type=$type;
        $this->value=$value;
    }
}

 $firstName = strtoupper("Abc");
$firstNamesArray = str_split($firstName);

$result=array();

 foreach ($firstNamesArray as $value) {
 $result[]=  getLetter($value);

    }
 print_r($result);

 $sum=0;
 foreach ($result as $r)
      if (!is_null($r))
           $sum+= $r->value;

 //here, in sum you will have the result of 1+2+3

 function getLetter($letter) {


     switch ( $letter)  :
     case  "A": 
         return new Letter("V",1);break;
    case  "B": 
         return new Letter("C",2); break;
     case  "C": 
         return new Letter("C",2); break;
     default: 
         return null;
     endswitch;
   }

方法2.保持2个阵列

一个用于指示其声音或辅音的布尔值,以及一个用于数值的布尔值。这种方法非常简单,所以我不提供示例:)

 $firstName = strtoupper("Abc");
$firstNamesArray = str_split($firstName);

$types=array();
$values=array();

 foreach ($firstNamesArray as $value) {
     getLetter($value);

 }

print_r($values);
 print_r($types);

 $sum=0;
 foreach ($values as $r)

           $sum+= $r ;

  echo $sum;
 //here, in sum you will have the result of 1+2+3

 function getLetter($letter) {
     global $types,$values;
     switch ( $letter ) :
     case  "A": 
       $types[]="V";
       $values[]=1;
        break;
    case  "B": 
        $types[]="C";
       $values[]=2;
        break;
     case  "C": 
        $types[]="C";
       $values[]=3;
        break;
     default: 
        break;
     endswitch;
   }