我想根据两个变量的内容返回一个值。让我解释一下,我有三个变量:
$var1 = 2; // This variable can change from 1 to 10 (based on the value in the database)
$var2 = 1; // This variable can have two values: 0 and 1 (based on the value in the database)
$result = ''; // This variable have a value based on the content of the two variables
我从数据库的两个不同列($var1和$var2)中获取两个值,并且我有$result,一个基于$var1和$var2内容的值的变量
这很容易做到,创建20个条件,像这样:
if ($var1 == 1 && $var == 0) $result = 'good morning';
if ($var1 == 1 && $var == 1) $result = 'hello';
if ($var1 == 2 && $var == 0) $result = 'never';
但是我的问题是:有没有一种方法可以让这段代码写得更容易,更容易阅读,更易于管理?
PS: $result有完全不同的值,在这种情况下不需要连接。
谢谢。
我认为这可能是你的代码更易于管理的版本:
switch([$var1,$var2]) {
case [0,0]:
// code
break;
case [0,1]:
// code
break;
// ...
default:
// pairing wasn't defined
}
不知道$var1
和$var2
的确切性质,也不知道$result
的意义,我真的不能帮助更多,但这应该是一个好的开始。
其他答案都很好,我只是想添加另一种可能性:
将您的result
的值存储到一个数组中,并像这样调用/搜索它:
$data[1][0] = 'good morning';
$data[1][1] = 'hello';
$data[2][0] = 'never';
//$data[x][y] = 'result of $var1=x and $var2=y';
// if exists a combination
if (isset($data[$var1][$var2])) {
// get the value
$result = $data[$var1][$var2];
}
$result = 'value' . $var1 . '.' . $var2;
嗯,有很多方法!
在这段代码之后,您可以构建字符串:$result = "$var1" . "." . "$var2";
使用"value-to-string"效果
也可以返回一个数组:
$result = array("var1" => $var1, "var2" => $var2);
并使用$res["var1"/"var2"]访问每个部件
不确定连接这是否是您正在寻找的。如果不是,那么switch()
可能是可行的方法:
<?php
switch(true){
case ($var1 == 1 && $var == 0):
$result = 'value1.0';
break;
case ($var1 == 1 && $var == 1):
$result = 'value1.1';
break;
case ($var1 == 2 && $var == 0):
$result = 'value2.0'
break;
default:
$result = 'value0.0';
}
?>
另一个选项,在你的编辑之后,将创建一个矩阵:
$m = array();
$m[1] = array(0 => 'good morning', 1 => 'hello');
$m[2] = array(0 => 'never');
$result = isset($m[$var1][$var2])?$m[$var1][$var2]:""; // Or false if you prefer