次の構造の配列が与えられます(ただし、明らかにさらに多くの項目が含まれています)。
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
)
)
4つのパラメーターを受け取る関数を作成しようとしています。
- $ role
- $currency
- $company[オプション]
- $group[オプション]
(「グループ」は「会社」の子です。グループが指定されている場合、親会社も常に指定されます)
...そして、次のことに基づいて、これらのパラメータに最適なアイテムから「時給」の値を返します。
$ 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;