我希望在我的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(案例返回值的第二部分)。
感谢您的建议/协助!
答案 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;
}