2014-06-11 69 views
1

我需要對某些數組進行排序,這些鍵是產品的價格。我已使用ksortkrsort,並且所有內容都按需要工作。問題是當鑰匙的數量超過一個數字時,那麼它不會訂購房產。按鍵號排序數組PHP

陣列例如:

$array = array(
'11,45' => 'product1', 
'8,91' => 'product2', 
'12,14' => 'product3', 
'9,54' => 'product4 
); 

結果我得到順序方興未艾:

11,45 - 12,14 - 8,91 - 9,54 

結果所期望的順序上升的:

8,91 - 9,54 - 11,45 - 12,14 
+0

'8,91'被看作是一個字符串不是int,你必須使用'8.91'所以1比8更高,根據字母順序 – kpp

+0

我把逗號只在例如,在我的代碼我有 。它並沒有訂購房產。 – ManelPNavarro

+0

嘗試將5.6和51.0添加到它們以查看它們將如何排序。因爲它仍然有可能被讀作字符串。如果是這樣,結果會變成'11,45 - 12,14 - 51.0 - 5.6 - 8.91 - 9.54'幾乎檢查排序是否按字母排序實際排序 – kpp

回答

3

使用ksort功能與SORT_NUMERIC標誌:

ksort($array, SORT_NUMERIC); 
+0

非常感謝,這解決了我的問題。 – ManelPNavarro

-1

此功能可能做的伎倆;它基於分割逗號前的內容。

function array_sort($arr){ 
if(is_array($arr)){ 
    $numeric = array(); 
    $string = array(); 
    foreach($arr as $k => $v) 
    { 
     if(isset($v["meta_value"])){ 
      $str = explode(" ",trim($v["meta_value"])); 
      $firstWord = explode(",",trim($str[0])); 
     }else{ 
      $str = $v; 
      $firstWord = explode(",",trim($str)); 
     } 

     $firstWord = $firstWord[0]; 

     if(is_numeric($firstWord)) 
     { 
      $numeric[(int)$firstWord] = $v; 
     }else{ 
      $string[$firstWord] = $v; 
     } 
     unset($firstWord); 
    } 
    ksort($string,SORT_STRING); 
    ksort($numeric,SORT_NUMERIC); 

    return array_merge((array)$string, (array)$numeric); 
} 
return false; 
} 

用法:

$meta =get_post_meta($post_id,$meta_key); 
$sorted = array_sort($meta); 
0

這種簡單和短期的解決方案可以幫助你。

$array = array(
'11.45' => 'product1', 
'8.91' => 'product2', 
'12.14' => 'product3', 
'9.54' => 'product4' 
); 

$array=array_flip($array); //flip key and values 
asort($array); //sort values low to high 
$array=array_flip($array); //flip the key and values again 
print_r($array);