2012-04-05 31 views
0

我試圖尋找和發現這一點:數組排序值之後是數組的孩子

Sort an array by a child array's value in PHP

但功能並不在我的情況下工作:

   $sorted = array(); 
       foreach($players as $player) 
       { 
        $p = Model::factory('user'); 
        $p->load($player['id']); 

        $sorted[] = array('id' => $player['id'], 'username' => $p->get_username()); 
       } 

哪有我按字母排序後的用戶名?

功能,

function cmp($a, $b) { 
     if ($a['username'] == $b['username']) { 
       return 0; 
     } 
     return ($a['username'] < $b['username']) ? -1 : 1; 
} 

,然後調用usort($排序, 「CMP」);將不會爲我工作(獲取錯誤未定義索引[2])..

有沒有什麼辦法來選擇是否應該排序降序或升序?

+0

使用正確的索引(你想排序值的指數) - 而不是'[2]' – Ing 2012-04-05 10:08:15

+0

使用'username'代替'2' – safarov 2012-04-05 10:08:56

+0

@karem - 檢查我的答案 – 2012-04-05 10:22:00

回答

0

的「議定書」功能將是:

// $param - the parameter by which you want to search 
function cmp(&$a, &$b, $param) { 
    switch($param) { 
     case 'id': 
      if ($a['id'] == $b['id']) { 
       return 0; 
      } 

      return ($a['id'] < $b['id']) ? -1 : 1; 
      break; 
     case 'username': 
      // string comparison 
      return strcmp($a['username'], $b['username']); 
      break; 
    } 
} 

// this is the sorting function by using an anonymous function 
// it is needed to pass the sorting criterion (sort by id/username) 
usort($sorted, function($a,$b) { 
    return cmp($a, $b, 'username'); 
}); 
+0

不能將參數傳遞給cmp函數,所以我可以提及要查找的索引?在這個代碼中,'用戶名'。所以usort($ sorted,cmp('username'));然後如果我想查找id,usort($ sorted,cmp('id'));等? – Karem 2012-04-05 10:27:47

+0

@karem - 檢查我編輯的答案。 – 2012-04-05 10:35:58

+0

謝謝答覆。我該怎麼稱呼它? usort($ sorted,cmp('username'));不會工作 – Karem 2012-04-05 10:38:15

0

因爲索引2不存在於您的數組中。你應該使用$ a ['username']或者$ a ['id'],但是我想你想對用戶名進行排序,然後使用$ a ['username']。