php condition inside array



在下面的代码中,当{VarName}为空(空白或null(时,我需要能够设置不同的where条件。

数组定义中是否可能包含if条件?或者,我可以在sql查询中进行验证吗?

$col["editoptions"] = array(
"value"=>$str, 
"onchange" => array(
array(
"sql"=> "select distinct place as k, place as v from mytable                                       
WHERE Name = '{VarName}' 
AND Area = '{VarArea}'
ORDER BY place",
"update_field" => "Localidade" )));

您可以在数组定义中使用三进制,如下所示:

condition ? value-if-true : value-if-false

例如

1 == 1 ? 'yes' : 'no'; // evaluates to 'yes'

所以在你的情况下:

$col["editoptions"] = array(
"value"=>$str, 
"onchange" => array(
array(
"sql"=> empty($VarName) ?
"YOUR ALTERNATIVE SQL HERE" : 
"select distinct place as k, place as v from mytable                                       
WHERE Name = '{VarName}' 
AND Area = '{VarArea}'
ORDER BY place",
"update_field" => "Localidade"
)
)
);

为了使数组定义更整洁,您应该考虑将SQL放入变量中,并在数组def:中引用该变量

$sql = empty($VarName) ?
"YOUR ALTERNATIVE SQL HERE" : 
"select distinct place as k, place as v from mytable                                       
WHERE Name = '{VarName}' 
AND Area = '{VarArea}'
ORDER BY place";
$col["editoptions"] = array(
"value"=>$str, 
"onchange" => array(
array(
"sql" => $sql,
"update_field" => "Localidade"
)
)
);

Like@Matt说您可以像下面这样在数组内部构建。

$VarName1 = null;
$col["editoptions"] = array(
"value"=> 'value', 
"onchange" => array(
array(
"sql"=> "select distinct place as k, place as v from mytable                                       
WHERE Name = " . ( $VarName1 ? "'{VarName1}'" : "'{VarName2}'" ) .     
"AND Area = '{VarArea}'
ORDER BY place",
"update_field" => "Localidade" )));

如果您使用下面这样的另一个变量中的条件在字符串中生成sql,则会更好,以便于维护。

$sql = "select distinct place as k, place as v from mytable                                      
WHERE Name = ";
if( $VarName1 ){
$sql .= "'{VarName1}'";
}
else{
$sql .= "'{VarName2}'";
}
$sql .=   "AND Area = '{VarArea}' ORDER BY place";

最新更新