2011-03-31 104 views
1

我有一個這樣的數組:排序數據

$B = array(
    array("firstnam" =>"A", "lastname"=>"D", "grade" => "k1", "score" => 50), 
    array("firstnam" =>"B", "lastname"=>"C", "grade" => "k4", "score" => 20), 
    array("firstnam" =>"C", "lastname"=>"B", "grade" => "k3", "score" => 10), 
    array("firstnam" =>"D", "lastname"=>"A", "grade" => "k2", "score" => 80) 
); 
+0

好的算法做什麼?我沒有按照什麼問題... – Blender 2011-03-31 15:49:57

+0

你如何表達你的數據?每行?你可以發佈更多的代碼嗎? – rlc 2011-03-31 15:51:11

回答

1

如果你想通過H4排序H1-3,試試這個:

array_multisort($h4, SORT_NUMERIC, SORT_ASC, $h3, SORT_NUMERIC, SORT_ASC, $h2, SORT_NUMERIC, SORT_ASC, $h1, SORT_NUMERIC, SORT_ASC); 

如果不是你在找什麼,試着改說你的問題。

+0

是的,謝謝我不知道這個版本的功能,很好。@ Unsigned Code labs – kn3l 2011-03-31 15:59:27

0
public function sortByHeader($columns, $sortOrder=1/* or -1 for desc */) { 
    $this->sort_columns = $columns; 
    $this->sort_order = $sortOrder; 
    uasort($this->data, array($this, "cmp")); 
} 

public function cmp($a, $b) { 
    foreach ($this->sort_columns as $column) { 
     // It's also important to check datatypes if you have string and it in diff columns 
     if ($a[$column] > $b[$column]) { 
      return $this->sort_order; 
     } 
     if ($a[$column] < $b[$column]) { 
      return -$this->sort_order; 
     } 
    } 
    return 0; 
} 

uasort允許使用自定義回調對數據進行排序。看PHP男子作參考

+0

爲什麼你需要$ columns作爲數組?如果你$ columns = array(「score」)或array(「score」 「姓」) ; – kn3l 2011-04-01 11:57:38

+0

如果您的分數值相同,則數據將按姓氏排序。我忘了爲每個排序欄添加說明,這會更有幫助。你也不能使用><符號作爲字符串,而應該使用strcmp。 – varela 2011-04-11 11:41:04