2012-09-06 130 views
0

我目前有一個值的關聯數組,我需要根據另一個數組中的值進行排序。PHP基於數組值的排序關聯數組

實施例:

如果我有值的, AssocArray = '122'=> '12', '123'=> '32', '232'=> '54',「343的陣列「=>」 12'

我需要檢查它針對值的另一個數組, orderArray =‘232’,‘123’

如果它存在的值時,則推到AssocArray的頂部。所以最終的數組看起來像這樣。

AssocArray = '232'=> '54', '123'=> '32', '122'=> '12', '343'=> '12'

抱歉,我沒有任何工作代碼,我仍然在學習PHP。

任何幫助將真正感謝:)謝謝。

+0

看看這裏:HTTP ://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php –

回答

2

循環訪問您的$orderArray,並檢查$AssocArray中是否存在帶該密鑰的元素。如果是,請將該元素添加到$result陣列中,並將其從原始$AssocArray中刪除。然後,你只需要合併在$AssocArray與任何剩下的元素被推到了$results陣列的頂部:

$AssocArray = array('122'=>'12', '123'=>'32', '232'=>'54', '343'=>'12'); 
$orderArray = array('232', '123'); 

rsort($orderArray, SORT_STRING); // Make sure the order array is sorted from highest to lowest 

$result = array(); 
foreach($orderArray as $key) { 
    if(isset($AssocArray[ $key ])) { 
     $result[$key] = $AssocArray[ $key ]; 
     unset($AssocArray[ $key ]); 
    } 
} 

foreach($AssocArray as $k => $v) { 
    $result[$k] = $v; 
} 

print_r($result); // Print the resulting array 

你可以看到,this prints

Array 
(
    [232] => 54 
    [123] => 32 
    [122] => 12 
    [343] => 12 
) 
+0

完美!非常感謝。 – devfunkd

0
$orderArray = array("232", "123"); 

function customSort($key1, $key2){ 
    $key1Pos = array_search($key1, $orderArray); 
    $key2Pos = array_search($key2, $orderArray); 
    if($key1Pos !== NULL && $key2Pos != NULL){ 
     return $key1Pos - $key2Pos; 
    }else if($key1Pos === NULL){ 
     return 1; 
    }else{ 
     return -1; 
    } 
} 


uksort($array, "customSort");