Как отсортировать элементы в массиве?

Есть записи в БД такого вида:

Код (Text):
  1. INSERT INTO `tokens` (`id`, `ticker`, `symbol`, `price`, `f_long`, `f_short`, `s_long`, `s_short`, `volume_5m`, `volatility`) VALUES
  2. (22, ‘AXS’, ‘AXSUSDT’, 29.74, ‘30.38000;6957;211353;2.2;08.05.2022 16:46:33;0’, ‘29.00000;11837;343273;2.4;08.05.2022 16:34:34;0’, ‘29.96000000;3685.37000000;110413;0.8;08.05.2022 16:47:39;0’, ‘29.54000000;4505.01000000;133077;0.6;08.05.2022 16:44:33;0’, ‘7834.94000000;233522.11020000’, 0.57),
  3. (23, ‘BAKE’, ‘BAKEUSDT’, 0.5101, », », », », ‘40769.10000000;20803.43380000’, 0.39),
  4. (24, ‘BAL’, ‘BALUSDT’, 12.725, », », », », ‘253.24000000;3219.11980000’, 0.16),
  5. (25, ‘BAND’, ‘BANDUSDT’, 2.7832, », », », », ‘857.90000000;2390.26030000’, 0.32),
  6. (26, ‘BAT’, ‘BATUSDT’, 0.5528, », », », ‘0.54920000;299874.00000000;164690;0.5;08.05.2022 16:46:42;0’, ‘20586.00000000;11396.99290000’, 0.31),

Таким образом я раскладываю записи по массивам:

PHP:
  1. $query_select = mysqli_query($db, «SELECT * FROM `tokens` ORDER BY `f_long` DESC, `f_short` DESC, `s_long` DESC, `s_short` DESC, `id`»);
  2. $count = 0;
  3. while ($select = mysqli_fetch_assoc($query_select))
  4. { $coins[$count][‘ticker’] = $select[‘ticker’];
  5. $coins[$count][‘symbol’] = $select[‘symbol’];
  6. $coins[$count][‘price’] = $select[‘price’];
  7. $coins[$count][‘f_long’] = $select[‘f_long’];
  8. $coins[$count][‘f_short’] = $select[‘f_short’];
  9. $coins[$count][‘s_long’] = $select[‘s_long’];
  10. $coins[$count][‘s_short’] = $select[‘s_short’];
  11. $coins[$count][‘volume_5m’] = $select[‘volume_5m’];
  12.     $count++;
  13. }

Первым шагом мне необходимо отформатировать только те записи, где есть данные в полях f_long, f_short, s_long, s_short, то есть отсортировать в начало те элементы, в которых есть данные хотя бы в одном из столбцов. Вторым шагом я не пойму, как мне сортировать данные внутри этих полей. Там данные такого вида разделенные через точку с запятой (;)

Код (Text):
  1. 0.0019350;103368480;200018;0.8;11.04.2022 08:50:03;0

Потом через explode я делю эти параметры и они у меня получаются отдельно и я их вывожу на экран. Но теперь стоит задача, отсортировать массив $coins по 4 значению в этой записи, в данном случае это 0.8.

Как отсортировать таким способом, чтобы первыми элементами были значения, в полях f_long, f_short, s_long, s_short если содержится хоть какая-то информация (не пустое) и чтобы они были отсортированы по 4-му значению этих записей (0.0019350;103368480;200018;0.8;11.04.2022 08:50:03;0) по убыванию.

Пробую делать так:

PHP:
  1.  usort($coins, function ($a, $b) {
  2.       $a = explode(‘;’,$a[‘f_long’]);
  3.       $b = explode(‘;’,$b[‘f_long’]);
  4.       if ($a[2] == $b[2]) {
  5.         return 0;
  6.       }
  7.       return $a[2] < $b[2] ? 1:-1;
  8.     });

Получаю вроде сортировку начиная с столбца f_long правильно, но так же выдаются ошибки Warning: Undefined array key 2 in /var/www/domains/site.ru/index.php on line 62 что указывает на строчку if ($a[2] == $b[2])

Но таким образом, я сортирую только поля этого столбца, а мне нужно собрать со всех 4-х столбцов (f_long f_short s_long s_short) и их выстроить по убыванию 4-ого значения

 

2-13 Строки замени на

PHP:
  1. $coins = iterator_to_array ( $query_select )

не пихай все в одну ячейку, если нужна сортировка и т.д. Действуй.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *