从排序数组中显示特定值

时间:2012-10-27 05:49:54

标签: arrays

这是我的排序数组

$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。根据calc,$ result也是100,所以它必须显示下一个更大的最接近的数字,即102.51,在止损中,它显示下一个较小的最接近的数字

CONDITION

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";} 

但它不起作用以及如何显示STOP LOSS

2 个答案:

答案 0 :(得分:0)

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

看起来您的数组从最小到最大排序。因此,要找到大于或等于$ num1的第一个值,只需从头到尾循环遍历数组,并在找到值&gt; = $ 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个值,我认为这是最简单的方法。

答案 1 :(得分:0)

只需轻微调整即可获得前5项&gt; = $ num1:

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

这应该返回一个最多5个值的数组。如果只有3个值&gt; = $ num1,那么它只返回3个值;如果没有值> gt; = $ 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);
    }
  }
}