Всем привет.
Нужна Ваша помощь, т.е. сам уже не знаю как быть...
Есть строка: "4.17,5.21-5.26,6.0-6.7,6.9-6.19". Задача получить массив чисел: "4.17, 5.21, 5.22, 5.23, 5.24, 5.25, 5.26, 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.9, 6.10, 6.11, 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19" (Строго в таком виде и никак иначе).
При этом, например число "6.5" меньше числа "6.12".
Пробовал через range, но она строит массив совершенно не в том порядке, т.к. считает что число "6.5" больше числа "6.12", а та-же убирает нули на конце, превращая число "6.0" в "6".
Как можно спарсить такую строку, для получения нужного результата, или как эту строку изменить, но что-бы оставить возможность указания как одного числа, так и диапазона чисел.
1. Dragon_Knight - 24 Сентября, 2014 - 17:05:49 - перейти к сообщению
2. RickMan - 24 Сентября, 2014 - 18:15:20 - перейти к сообщению
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $str = '4.17,5.21-5.26,6.0-6.7,6.9-6.19';
- foreach ($f_arr as $v){
- if (number_format((($s_arr[0] * 10) - floor($s_arr[0] * 10)), 2) !== number_format((($s_arr[1] * 10) - floor($s_arr[1] * 10)), 2)){
- if ($s_arr[0] < $s_arr[1]){
- for ($i = $s_arr[0]; $i<$s_arr[1]; $i += 0.01){
- $result[] = $i;
- }
- }else{
- for ($i = $s_arr[0]; $i>$s_arr[1]; $i -= 0.01){
- $result[] = $i;
- }
- }
- }else{
- if ($s_arr[0] < $s_arr[1]){
- for ($i = $s_arr[0]; $i<$s_arr[1]; $i += 0.1){
- $result[] = $i;
- }
- }else{
- for ($i = $s_arr[0]; $i>$s_arr[1]; $i -= 0.01){
- $result[] = $i;
- }
- }
- }
- }else{
- $result[] = $v;
- }
- }
Вот решение...НО вы не правы по поводу последнего диапазона... Почему вы посчитали что 6,9 = 6,09 )))) Поэтому там диапахон цифр чуть другой)
Ответ в данном случае должен быть:
Цитата:
Array ( [0] => 4.17 [1] => 5.21 [2] => 5.22 [3] => 5.23 [4] => 5.24 [5] => 5.25 [6] => 5.26 [7] => 6.0 [8] => 6.1 [9] => 6.2 [10] => 6.3 [11] => 6.4 [12] => 6.5 [13] => 6.6 [14] => 6.7 [15] => 6.9 [16] => 6.89 [17] => 6.88 [18] => 6.87 [19] => 6.86 [20] => 6.85 [21] => 6.84 [22] => 6.83 [23] => 6.82 [24] => 6.81 [25] => 6.8 [26] => 6.79 [27] => 6.78 [28] => 6.77 [29] => 6.76 [30] => 6.75 [31] => 6.74 [32] => 6.73 [33] => 6.72 [34] => 6.71 [35] => 6.7 [36] => 6.69 [37] => 6.68 [38] => 6.67 [39] => 6.66 [40] => 6.65 [41] => 6.64 [42] => 6.63 [43] => 6.62 [44] => 6.61 [45] => 6.6 [46] => 6.59 [47] => 6.58 [48] => 6.57 [49] => 6.56 [50] => 6.55 [51] => 6.54 [52] => 6.53 [53] => 6.52 [54] => 6.51 [55] => 6.5 [56] => 6.49 [57] => 6.48 [58] => 6.47 [59] => 6.46 [60] => 6.45 [61] => 6.44 [62] => 6.43 [63] => 6.42 [64] => 6.41 [65] => 6.4 [66] => 6.39 [67] => 6.38 [68] => 6.37 [69] => 6.36 [70] => 6.35 [71] => 6.34 [72] => 6.33 [73] => 6.32 [74] => 6.31 [75] => 6.3 [76] => 6.29 [77] => 6.28 [78] => 6.27 [79] => 6.26 [80] => 6.25 [81] => 6.24 [82] => 6.23 [83] => 6.22 [84] => 6.21 [85] => 6.2 [86] => 6.19 )
(Добавление)
Вот точнее где ваша ошибка:
Цитата:
6.9-6.19
и разбили это как
Цитата:
6.9, 6.10, 6.11, 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19
а надо:
Цитата:
6.90, 6.89, 6.88 ................ 6.20, 6.19