javascript — сортировать временные метки внутреннего массива

У меня есть массив с несколькими элементами, который выглядит следующим образом:

  {
"name": "DR",
"data": [
[
"1508112000000",
4
],
[
"1534204800000",
1
]
],
"type": "areaspline"},
{
"name": "SIT",
"data": [
[
"1508112000000",
4
],
[
"1534204800000",
1
],
[
"1506384000000",
3
],
[
"1534204800000",
1
],
[
"1531094400000",
1
],
[
"1528502400000",
1
]
],
"type": "areaspline"},

Это именно тот формат, который я использую для отправки данных в верхние графики, однако проблема в том, что диаграмма разрывается, если временные метки в каждой среде (DR, SIT) не в порядке.

Как я могу отсортировать «данные» внутри каждой среды по отметке времени?

Этот JSON генерируется в PHP и отправляется в JavaScript. Поэтому я хотел бы знать, как сортировать данные внутри PHP или JavaScript.

Благодарю.

-3

Решение

Это на самом деле довольно тривиально, если вы знаете о usort функция. Это позволяет вам определить свою собственную функцию сортировки, так что вы можете сортировать на основе любого фактора, независимо от того, какие 2 объекта были переданы.

Обратите внимание, что из вашего примера json мне пришлось добавить набор квадратных скобок вокруг всего этого, чтобы заставить PHP разобрать его с json_decode ,

<?php

// note I had to add square brackets to your
// demo json ....

$json='[{
"name": "DR",
"data": [
[
"1508112000000",
4
],
[
"1534204800000",
1
]
],
"type": "areaspline"},
{
"name": "SIT",
"data": [
[
"1508112000000",
4
],
[
"1534204800000",
1
],
[
"1506384000000",
3
],
[
"1534204800000",
1
],
[
"1531094400000",
1
],
[
"1528502400000",
1
]
],
"type": "areaspline"}]';

$json_obj_arr=json_decode($json,true);

print_r($json_obj_arr);
print("\n\n");

// a function to handle the sorting itself
// usort will pass it an array(timestamp,datavalue) for both
// $a and $b so we compare the [0] element of each
function cmp($a, $b)
{
if ($a[0] == $b[0]) {
return 0;
}
return ($a[0] < $b[0]) ? -1 : 1;
}


// loop through the array, first is indexed
for($i=0;$i<count($json_obj_arr);$i++){
// then each one of those contains an
// associtive array with an element named ['data'] -
// this is an indexed array that you want sorted
// on the [0] element

usort($json_obj_arr[$i]['data'],"cmp");
}

print_r($json_obj_arr);
print("\n\n");
?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]