編集3:
リクエストに応じて、質問を単純化しようとしています。
これは、xml ファイルからの私のデータのサンプルです。
<entry>
<title>Entry 1</title>
<f:max_value_a>499 999</f:max_value_a>
<f:max_value_b>999 999</f:max_value_b>
<f:min_value_a>0</f:min_value_a>
<f:min_value_b>500 000</f:min_value_b>
<f:min_value_c>1 000 000</f:min_value_c>
<f:value_for_a>5,10</f:value_for_a>
<f:value_for_b>4,50</f:value_for_b>
<f:value_for_c>3,90</f:value_for_c>
</entry>
<entry>
<title>Entry 2</title>
<f:min_value_a>0</f:min_value_a>
<f:value_for_a>4,20</f:value_for_a>
</entry>
<entry>
<title>Entry 3</title>
<f:max_value_a>1 999 999</f:max_value_a>
<f:min_value_a>100 000</f:min_value_a>
<f:min_value_b>2 000 000</f:min_value_b>
<f:value_for_a>3,735</f:value_for_a>
<f:value_for_b>3,445</f:value_for_b>
</entry>
f:value_for_d は最大値であり、f:value_for_c は d よりも小さいなどです。
動的なターゲット値があります (この例では 2 000 000 にしましょう)
max_value が targetvalue より大きい値を取得したいのですが、max_value が定義されておらず、"0" に設定されている場合があります。max_value の「0」は、無制限の「屋根」を意味する必要があります。min_value を targetvalue より大きくすることはできませんが、min_value が定義されておらず、「0」に設定されている場合があります。「0」min_value は、無制限の「フロア」を意味する必要があります。
私はこのコードで試しました
if ($value_for_d > 0 ){
if (($min_value_d <= $targetvalue) xor ($min_value_d == 0)){
if (($max_value_d >= $targetvalue) xor ($max_value_d == 0)){
$query_result = TRUE;
$value = $value_for_d;
}
}
}elseif ($value_for_c > 0 ){
if (($min_value_c <= $targetvalue) xor ($min_value_c == 0)){
if (($max_value_c >= $targetvalue) xor ($max_value_c == 0)){
$query_result = TRUE;
$value = $value_for_c;
}
}
}elseif ($value_for_b > 0 ){
if (($min_value_b <= $targetvalue) xor ($min_value_b == 0)){
if (($max_value_b >= $targetvalue) xor ($max_value_b == 0)){
$query_result = TRUE;
$value = $value_for_b;
}
}
}elseif ($value_for_a > 0 ){
if (($min_value_a <= $targetvalue) xor ($min_value_a == 0)){
if (($max_value_a >= $targetvalue) xor ($max_value_a == 0)){
$query_result = TRUE;
$value = $value_for_a;
}
}
}
「2 000 000」のターゲット値でこのコードを実行すると、次の結果が得られます。
Entry 1 - 3.9 (correct value is 3.9)
Entry 2 - 0 (correct value is 4.2)
Entry 3 - 3.445 (correct value is 3.445)
targetvalue をさらに低い 500 000 に設定すると、すべてのエントリで 0 になります。
編集4:
私が行った場合:
var_dump($min_value_d,$max_value_d,$min_value_c,$max_value_c,$min_value_b,$max_value_b,$min_value_a,$max_value_a);
この出力が得られます: https://dpaste.de/DtjhO/