0

这是我的排序数组

$sortedArray = array($value_one_fin,$value_two_fin,$value_three_fin,$value_four_fin,$value_five_fin,$value_six_fin,$value_seven_fin,$value_eight_fin,$value_nine_fin,$value_ten_fin,$value_eleven_fin,$value_twelve_fin,$value_thirteen_fin,$value_fourteen_fin,$value_fifteen_fin,$value_sixteen_fin,$value_seventeen_fin,$value_eighteen_fin,$value_nineteen_fin,$value_twenty_fin,$value_twentyone_fin,$value_twentytwo_fin,$value_twentythree_fin,$value_twentyfour_fin); 

$result=findClosest($sortedArray,$num1);

这是我存储输入数字的变量

$num1

我想要做的是以在/上方购买的方式显示排序数组中的值:102.51 目标:105,107.58,110.19,112.83 止损:100

在上面的例子中,我输入了 100 作为 $num1。根据计算,$result 也是 100,因此它必须显示下一个更大的最接近数字,即 102.51,并且在止损中它应该显示下一个更小的最接近数字

健康)状况

1>如果输入的数字 $num1 大于 $result 然后显示排序数组中下一个更大的最接近的数字

2>如果输入的数字 $num1 等于 $result 然后显示排序数组中下一个更大的最接近的数字

请帮我解决这个问题我该怎么做我这样做

Buy At/Above ";if ($num1>$result) {echo "$result ";}if ($num1=$result) {echo "$result ";}if ($num1<$result) {echo "$result ";}echo "for Targets"; if ($result<$value_one_fin){echo " $value_one_fin,";} 
              if ($result<$value_two_fin){echo " $value_two_fin,";} 
              if ($result<$value_three_fin){echo " $value_three_fin,";} 
              if ($result<$value_four_fin){echo " $value_four_fin,";} 
              if ($result<$value_five_fin){echo " $value_five_fin,";} 
              if ($result<$value_six_fin){echo " $value_six_fin,";} 
              if ($result<$value_seven_fin){echo " $value_seven_fin,";} 
              if ($result<$value_eight_fin){echo " $value_eight_fin,";} 
              if ($result<$value_nine_fin){echo " $value_nine_fin,";} 
              if ($result<$value_ten_fin){echo " $value_ten_fin,";} 
              if ($result<$value_eleven_fin){echo " $value_eleven_fin,";} 
              if ($result<$value_twelve_fin){echo " $value_twelve_fin,";} 
              if ($result<$value_thirteen_fin){echo " $value_thirteen_fin,";} 
              if ($result<$value_fourteen_fin){echo " $value_fourteen_fin,";} 
              if ($result<$value_fifteen_fin){echo " $value_fifteen_fin,";} 
              if ($result<$value_sixteen_fin){echo " $value_sixteen_fin,";} 
              if ($result<$value_seventeen_fin){echo " $value_seventeen_fin,";} 
              if ($result<$value_eighteen_fin){echo " $value_eighteen_fin,";} 
              if ($result<$value_nineteen_fin){echo " $value_nineteen_fin,";} 
              if ($result<$value_twenty_fin){echo " $value_twenty_fin,";} 
              if ($result<$value_twentyone_fin){echo " $value_twentyone_fin,";} 
              if ($result<$value_twentytwo_fin){echo " $value_twentytwo_fin,";} 
              if ($result<$value_twentythree_fin){echo " $value_twentythree_fin,";} 
              if ($result<$value_twentyfour_fin){echo " $value_twentyfour_fin";} 

但它不起作用以及如何显示止损

4

2 回答 2

0

只需稍作调整即可获得前 5 个项目 >= $num1:

function find5Closest($sortedArray, $num1) {
  for ($i = 0; $i < sizeOf($sortedArray); $i++) {
    if ($sortedArray[$i] >= $num1) {
      return array_slice($sortedArray, $i, 5);
    }
  }
}

这应该返回一个最多 5 个值的数组。如果只有 3 个值 >= $num1,那么它只会返回 3 个值;如果没有值 >= $num1 它将返回一个空数组。

相似地:

function find5ClosestLessThanOrEqual($sortedArray, $num1) {
  for ($i = sizeOf($sortedArray) - 1; $i >= 0; $i--) {
    if ($sortedArray[$i] <= $num1) {
      return array_slice($sortedArray, min(0, $i-4), 5);
    }
  }
}
于 2012-10-27T19:21:38.283 回答
0

如果我误解了这个问题,我深表歉意——我不是 100% 清楚你想要达到的目标,但我会尽力提供帮助。

看起来您的数组从最小到最大排序。因此,要找到大于或等于 $num1 的第一个值,只需从头到尾循环遍历数组,然后在找到 >= $num1 的值时停止,例如

function findClosest($sortedArray, $num1) {
  foreach ($sortedArray as $value) {
    if ($value >= $num1) {
      return $value;
    }
  }
}

要找到小于或等于 $num1 的最接近的数字,请从数组的末尾循环到开头,例如

function findClosestLessThanOrEqual($sortedArray, $num1) {
  for ($i = sizeOf($sortedArray) - 1; $i >= 0; $i--) {
    if ($sortedArray[$i] <= $num1) {
      return $sortedArray[$i];
    }
  }
}

有更快的方法来搜索一个大数组,但如果你的数组只包含 24 个值,我认为这是最简单的方法。

于 2012-10-27T10:24:30.567 回答