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

上記の例では、$num1として100を入力しました。計算によると、$ resultも100であるため、次に大きい最も近い数値である102.51を表示する必要があり、ストップロスでは次に小さい最も近い数値を表示する必要があります。

調子

1>入力された数値$num1が$resultより大きい場合、ソートされた配列から次に大きい数値を表示します

2>入力された数値$num1が$resultと等しい場合、ソートされた配列から次に大きい数値を表示します

plsはこれで私を助けますどうすれば私はこれをやってこれを行うことができますか

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

しかし、それは機能せず、STOPLOSSを表示する方法もあります

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つの値の配列が返されます。$ num1以上の値が3つしかない場合は、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 に答える