Sorikon
@Sorikon
PHP, PYTHON

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

Есть записи в БД такого вида:
INSERT INTO `tokens` (`id`, `ticker`, `symbol`, `price`, `f_long`, `f_short`, `s_long`, `s_short`, `volume_5m`, `volatility`) VALUES
(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),
(23, 'BAKE', 'BAKEUSDT', 0.5101, '', '', '', '', '40769.10000000;20803.43380000', 0.39),
(24, 'BAL', 'BALUSDT', 12.725, '', '', '', '', '253.24000000;3219.11980000', 0.16),
(25, 'BAND', 'BANDUSDT', 2.7832, '', '', '', '', '857.90000000;2390.26030000', 0.32),
(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),

Таким образом я раскладываю записи по массивам:
$query_select = mysqli_query($db, "SELECT * FROM `tokens` ORDER BY `id`");
$count = 0;

while ($select = mysqli_fetch_assoc($query_select))
{ $coins[$count]['ticker'] = $select['ticker']; 
$coins[$count]['symbol'] = $select['symbol']; 
$coins[$count]['price'] = $select['price']; 
$coins[$count]['f_long'] = $select['f_long']; 
    $coins[$count]['f_short'] = $select['f_short']; 
$coins[$count]['s_long'] = $select['s_long']; 
$coins[$count]['s_short'] = $select['s_short']; 
$coins[$count]['volume_5m'] = $select['volume_5m']; 

    $count++;
}

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

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)
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
@VadimFox
usort
usort($tokens, function ($a, $b) {
	$a = explode(';',$a['f_long']);
	$b = explode(';',$b['f_long']);
	if ($a[3] == $b[3]) {
		return 0;
	}
	return $a[3] < $b[3]?1:-1;
});


code
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы