下面是分配给变量$value的数组
Array
(
[colname] => leadnumber
[tabname] => lead
[uitypeid] => 14
[fieldname] => leadnumber
[filedlabel] => Lead Number
[readmode] => Yes
[mandmode] => No
[fieldmode] => Yes
[fieldseq] => 1
-----
----
)
我需要什么。我必须检查每个项目的值,并像下面这样附加。
$rule = "required|unique|read|tabname|lorem|ipsum|etc.."
我已经完成了如下操作。
if($value['mandmode'] == "No"){
$rule = 'trim';
}
if($value['modfieldunique'] == "No"){
$rule = $rule.'|unique';
}
if($value['readmode'] == "No"){
$rule = $rule.'|read';
}
我的问题是,在将每个值附加到变量之前,我有很多这样的条件来检查每个值。如果我这样做,脚本运行时间会增加。有没有更好的方法来获得这种格式的结果?
您可以将规则构造成一个数组,如以下
$referenceRules = [
"manmode" => "trim",
"modfieldunique" => "unique",
"readmode" => "read"
];
然后对数组进行迭代,并检查哪些元素符合规则
如果当前值为"否",if
子句将检查当前键是否也是referenceRules
数组and
的键
假设您正在检查所有元素以匹配"否"。
$rules = [];
foreach($array as $key => $value){
if (in_array($key,array_keys($referenceRules)) and $value == "No"){
print $key . ":" . $value . PHP_EOL;
$rules[] = $referenceRules[$key];
}
}
使用此阵列
$array = [
"colname" => "leadnumber",
"tabname" => "lead",
"uitypeid" => 14,
"fieldname" => "leadnumber",
"filedlabel" => "Lead Number",
"readmode" => "No",
"manmode" => "No", // I changed the key here to match your rules
"fieldmode" => "Yes",
"fieldseq" => 1
];
以上将输出
readmode:No
manmode:No
最后简单地用implode
和$rules
数组输出需要的字符串
$ruleString = implode("|",$rules);
print $ruleString;
这将输出
read|trim
只需获取一组规则。
并根据条件向其附加值。
最后,我们将只获得所需的规则作为数组元素。
现在,只需用|
将它们全部追加即可。
完成
代码:
<?php
$rules = array();
if ($value['mandmode'] == "No"){
$rules[] = 'trim';
}
if ($value['modfieldunique'] == "No"){
$rules[] = 'unique';
}
if ($value['readmode'] == "No"){
$rules[] = 'read';
}
$rule = ! empty($rules) ? implode('|', $rules) : '';
?>
尝试以下循环:
$rule = '';
foreach($value as $elementKey => $elementValue)
{
switch($elementKey)
{
case "mandmode":
if($elementValue == 'no')
$rule .= 'trim|';
break;
case "modfieldunique":
if($elementValue == 'no')
$rule .= 'unique|';
break;
case "readmode":
case "XYZ": //You can add more conditions as requirement
if($elementValue == 'no')
$rule .= 'read|';
break;
}
}
$rule = substr($rule,0,-1);
您可以添加多个可能出现相同条件的情况。。。希望这能帮助
// Take arrays from AlexAndrei answer
$referenceRules = [
"manmode" => "trim",
"modfieldunique" => "unique",
"readmode" => "read"
];
$array = [
"colname" => "leadnumber",
"tabname" => "lead",
"uitypeid" => 14,
"fieldname" => "leadnumber",
"filedlabel" => "Lead Number",
"readmode" => "No",
"manmode" => "No", // I changed the key here to match your rules
"fieldmode" => "Yes",
"fieldseq" => 1
];
// Save only those which equal No
$temp = array_filter($array, function($i) { return $i === "No"; });
// Take corresponding itemms from referenceRules array
$temp = array_intersect_key($referenceRules, $temp);
// Make string
echo implode('|', $temp); // trim|read
演示