2013-04-18 41 views
2

我必須使用返回JSON的webservice。解碼JSON後,我得到陣列:使用二維密鑰的穩定排序數組

$arrays[0]["2013-04-09"]=$someValue; 
$arrays[1]["2013-04-09"]=$someValue; 
$arrays[2]["2013-04-11"]=$someValue; 
$arrays[3]["2013-04-05"]=$someValue; 
$arrays[4]["2013-04-09"]=$someValue; 

我想排序(穩定的方式,並使用第二暗淡鍵表面)陣列並獲得儘可能結果:

$arrays[3]["2013-04-05"]; 
$arrays[0]["2013-04-09"]; //stable way don't swap with next val 
$arrays[1]["2013-04-09"]; //stable way don't swap with next and prev vel 
$arrays[4]["2013-04-09"]; //stable way, don't swap with prev val 
$arrays[2]["2013-04-11"]; 

你能幫助我嗎?我嘗試創建自己的功能,因爲只使用第一個調暗鍵進行排序,因爲ksort或krsort排序。謝謝你的答案。

編輯: 我試着寫我自己的功能 - 這一點也適用 - 我在單位考了錯誤的「有效答案」,這是原因,我說,這不是工作:

private function getResult(){ 
... 
usort($arrays,array($this,'mycmp')); 
... 
} 
private function mycmp($a, $b){ 
    foreach($a as $key=>$val){ 
     $first = $key; 
    } 
    foreach($b as $key=>$val){ 
     $second = $key; 
    } 

    if ($first == $second){ 
     return 0; 
    } 
    return ($first < $second) ? -1:1; 

} 

FOR HELP

+0

該結構還有其他什麼鍵?如果在子數組中只有一個鍵(日期),它應該相當簡單。發佈一些示例JSON以幫助解答。 – cmbuckley

+0

在意識到你的鑰匙不同之前,我只是有一個完美的答案。你想按鍵或按第二維值排序嗎? – ToBe

+0

供參考:它會[這種方法](http://stackoverflow.com/questions/2477496/php-sort-array-by-subarray-value),但使用的是關鍵,而不是價值。因此我的問題在上面。 – cmbuckley

回答

0

THANKS假設每個子陣列具有在同一個地方的日期鍵(如對象總是第一個鍵),你可以做到以下幾點:

$keyPosition = 0; // location of the key in the array structures 

usort($data, function ($a, $b) use ($keyPosition) { 
    $aKeys = array_keys($a); 
    $bKeys = array_keys($b); 

    return strcmp($aKeys[$keyPosition], $bKeys[$keyPosition]); 
}); 

但是,你應該知道的是PHP no longer supports stable sorting,所以你可能得不到與以前完全相同的順序。如果這是絕對要求,則可能需要推出自己的排序功能。 Here's a Gist that might help

+0

你的方式對我有用(差異問題) –