给定一个具有以下结构的数组(尽管其中显然包含更多项):
Array
(
[0] => stdClass Object
(
[currency] => 1
[role] => 3
[client_company] =>
[client_group] =>
[hourly_rate] => 115.00
)
[1] => stdClass Object
(
[currency] => 1
[role] => 1
[client_company] =>
[client_group] =>
[hourly_rate] => 115.00
)
[2] => stdClass Object
(
[currency] => 1
[role] => 3
[client_company] => 58
[client_group] =>
[hourly_rate] => 110.00
)
)
我正在尝试创建一个带有四个参数的函数:
- $角色
- $货币
- $公司 [可选]
- $group [可选]
(“groups”是“companies”的子级:如果指定了组,则始终也会指定母公司)
...这将返回最适合这些参数的项目的“小时费率”值,基于:
如果指定了 $row、$currency、$company 和 $group:
- 找到与角色、货币、公司和团体相匹配的汇率。
- 如果没有,请找到与角色、货币和公司匹配的
- 如果没有,找一个与角色和币种匹配的
- 如果没有,返回 FALSE
如果只指定了 $row、$currency 和 $company:
- 找到与职位、货币和公司相匹配的费率
- 如果没有,找一个与角色和币种匹配的
- 如果没有,返回 FALSE
如果只指定了 $row 和 $currency:
- 找到与角色和货币相匹配的汇率
- 如果没有,返回 FALSE
我得到的是下面,它的工作原理。然而,它像罪恶一样丑陋。必须有一种更优雅的方式,而不是仅仅将大量 if/else 和循环放在一起。然而,现在是星期五,我午餐吃的比萨太多了,我的大脑被奶酪淹没了。
你能帮我吗?
$hourly_rate = FALSE;
if ( !empty($group) && !empty($company) ) {
foreach ( $rates_cache as $rate ) {
if ( $rate->currency == $currency && $rate->role == $role && (int) $rate->client_company === (int) $company && (int) $rate->client_group === (int) $group ) {
$hourly_rate = $rate->hourly_rate;
}
}
if ( empty($hourly_rate) ) {
foreach ( $rates_cache as $rate ) {
if ( $rate->currency == $currency && $rate->role == $role && (int) $rate->client_company === (int) $company ) {
$hourly_rate = $rate->hourly_rate;
}
}
}
if ( empty($hourly_rate) ) {
foreach ( $rates_cache as $rate ) {
if ( $rate->currency == $currency && $rate->role == $role ) {
$hourly_rate = $rate->hourly_rate;
}
}
}
}else if ( !empty($company) ) {
foreach ( $rates_cache as $rate ) {
if ( $rate->currency == $currency && $rate->role == $role && (int) $rate->client_company === (int) $company ) {
$hourly_rate = $rate->hourly_rate;
}
}
if ( empty($hourly_rate) ) {
foreach ( $rates_cache as $rate ) {
if ( $rate->currency == $currency && $rate->role == $role ) {
$hourly_rate = $rate->hourly_rate;
}
}
}
}else{
foreach ( $rates_cache as $rate ) {
if ( $rate->currency == $currency && $rate->role == $role ) {
$hourly_rate = $rate->hourly_rate;
}
}
}
return $hourly_rate;