2017-03-29 99 views
0

我正在使用以下json数据。 (关键是一个时间为hh:mm)根据当前时间对php数组进行排序

"chart": { 
    "23:20": 11, 
    "23:30": 11, 
    "23:40": 11, 
    "23:50": 16, 
    "00:00": 16, 
    "00:10": 14, 
    "00:20": 11, 
    "00:30": 12, 
    "00:40": 14, 
    "00:50": 10, 
    "01:00": 8, 
    "01:10": 12, 
    "01:20": 15, 
    "01:30": 13, 
    "01:40": 11, 
    "01:50": 8, 
    "02:00": 8 
} 

https://pastebin.com/cp16Rr9w

我然后将数据移动到一个PHP阵列。我想对数组进行排序,所以它从当前的服务器时间开始并从那里开始。

目前我使用的是下面的PHP(未分类)

<?php 
    foreach ($data['chart'] as $key => $value){ 
     echo 'Time: '.$key.'Data: '.$value; 
    } 
    ?> 
+0

现在有答案吨对SO有关排序的阵列,告诉我们你尝试过什么,如果有问题,你的尝试。 – hassan

+0

我一直在调查uksort,但我从来没有尝试过,因为我不明白它 – Mattigins

+0

你可以添加一个你想要的输出的例子吗? – radicarl

回答

0

最简单的方法也许将与array_filter()首先过滤掉所有“太老”的条目,然后使用ksort()结果数组排序:

<?php 

function getFilter($server_time) { 
    return function($item) use($server_time) { 
     return (strtotime($item) >= $server_time); 
    }; 
} 

$data = '{"chart": { 
      "23:20": 11,"23:30": 11,"23:40": 11,"23:50": 16,"00:00": 16, 
      "00:10": 14,"00:20": 11,"00:30": 12,"00:40": 14,"00:50": 10, 
      "01:00": 8,"01:10": 12,"01:20": 15,"01:30": 13,"01:40": 11, 
      "01:50": 8,"02:00": 8 
}}'; 

$json = json_decode($data, true); 
$src = $json['chart']; 

$server_time = strtotime("now"); 

$filtered = array_filter($src, getFilter($server_time), ARRAY_FILTER_USE_KEY); 
ksort($filtered); 

print_r($filtered); 

现场测试案例:

+0

我不明白uksort()..所以我有这个'$ time = date(“H:i”); \t \t function timeSort($ a,$ b){ \t \t if($ a == $ b)return 0; \t \t return($ a <$ b)? - 1:1; \t \t} \t \t \t \t uksort($数据[ '图表'], “timeSort”);'我不明白的地方使用'$ time'可变 – Mattigins

+1

将'的var_dump($ a)的'在你的'timeSort()'方法体中,你会看到...试错了! –

+0

@MarcinOrlowski我认为这不是关于排序,“所以它从当前的服务器时间开始,并从那里开始。” – hassan

-1
function hsort($a, $b) // callback function for uksort function 
{ 
    return (floatval(str_replace(":", ".", $a)) - floatval(str_replace(":", ".", $b))) // convert each time to float value, like '01:56'-> "01.56", then compare values as float 
} 

$chart = array_flip($chart); // flip indexes with values to get ability to operate with indexes as array values (which are time in your array) 
uksort($chart, "hsort"); // sort time values 
$chart = array_flip($chart); // flip again to make time values as index again 
+0

这没有解释。我可以解释一下吗? – Mattigins

+0

添加评论。 – diavolic

+0

所以据我所知,这只是从最低到最高的时间排序? – Mattigins

0

尝试:

$data = json_decode('{"chart": { 
    "23:20": 11, 
    "23:30": 11, 
    "23:40": 11, 
    "23:50": 16, 
    "00:00": 16, 
    "00:10": 14, 
    "00:20": 11, 
    "00:30": 12, 
    "00:40": 14, 
    "00:50": 10, 
    "01:00": 8, 
    "01:10": 12, 
    "01:20": 15, 
    "01:30": 13, 
    "01:40": 11, 
    "01:50": 8, 
    "02:00": 8 
}}'); 

$data = (array) $data->chart; 

function sort_time($a, $b) { return strtotime($a) > strtotime($b); } 

uksort($data, 'sort_time'); 

foreach ($data as $key => $value) { 
    echo "$key: $value\n"; 
} 
相关问题