2017-03-29 144 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"; 
} 
相關問題