2012-04-26 102 views
1

試圖通過這種多維數組的網名進行排序:通過鍵排序多維數組按字母順序

//Looping through this for each member of a group 
unset($member_info); 
$member_info->id   = $member->id; 
$member_info->screen_name = $member->screen_name; 
$member_info->first_name = $member->first_name; 
$member_info->last_name = $member->last_name; 
$member_info->email  = $member->email; 

//Sort member_info by screen name 
$member_array = sort_by_array_key($member_info,$member_info->screen_name,'ASC'); 
$member_list[] = $member_array; 

排序功能:

function sort_by_array_key($array,$sort_key,$dir = 'ASC') { 
    usort($array, function($a,$b) use ($sort_key){ 
     return strnatcasecmp($a["$sort_key"], $b["$sort_key"]); 
    }); 
    if ($dir == 'DESC') { return array_reverse($array); } 
    else { return $array; } 
} 

作爲一個例子,屏幕名稱是當前即使在我運行排序功能後,按此順序:

newUser 
Chris 
Carlos 
Jason 

我可能在錯誤的時間應用這種排序,但在查看其他類似示例後,我遇到了這個問題,任何幫助表示感謝,謝謝!

+1

檢查** ** DavidG的做法在這裏:http://php.net/manual/en/function.ksort.php在評論 – hjpotter92 2012-04-26 22:05:02

+0

'$ member_info'不是一個數組你的問題,但你把它作爲一個傳入'sort_by_array_key'函數。可能這是你的問題? – hakre 2012-04-26 22:13:10

回答

0

首先,您正在對單個項目進行排序,您可能希望對實際列表$ member_list進行排序。此外,您正嘗試對初始化對象的數組進行排序。要麼初始化一個數組,要麼排序一個對象。

如果我假設你真的想與陣列玩,就像你暗示關於這個問題,這可能是你試圖做一些事情:

<?php 

$member_info = Array(); 
$member_info['id']   = '1'; 
$member_info['screen_name'] = 'Chris'; 
$member_info['first_name'] = ''; 
$member_info['last_name'] = ''; 
$member_info['email']  = ''; 

$member_list[] = $member_info; 

$member_info = Array(); 
$member_info['id']   = '2'; 
$member_info['screen_name'] = 'Carlos'; 
$member_info['first_name'] = ''; 
$member_info['last_name'] = ''; 
$member_info['email']  = ''; 

$member_list[] = $member_info; 

$member_info = Array(); 
$member_info['id']   = '3'; 
$member_info['screen_name'] = 'Jason'; 
$member_info['first_name'] = ''; 
$member_info['last_name'] = ''; 
$member_info['email']  = ''; 

$member_list[] = $member_info; 


//Sort member_list by screen name 
$member_list = sort_by_array_key($member_list,'screen_name','ASC'); 

function sort_by_array_key($array,$sort_key,$dir = 'ASC') { 
    usort($array, function($a,$b) use ($sort_key){ 
     return strnatcasecmp($a["$sort_key"], $b["$sort_key"]); 
    }); 
    if ($dir == 'DESC') { return array_reverse($array); } 
    else { return $array; } 
} 

print_r($member_list); 

/* 
Array 
(
    [0] => Array 
     (
      [id] => 2 
      [screen_name] => Carlos 
      [first_name] => 
      [last_name] => 
      [email] => 
     ) 

    [1] => Array 
     (
      [id] => 1 
      [screen_name] => Chris 
      [first_name] => 
      [last_name] => 
      [email] => 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [screen_name] => Jason 
      [first_name] => 
      [last_name] => 
      [email] => 
     ) 

) 
*/ 
0

ksort - 「排序對數組按照鍵,保持關鍵是數據相關性,這對於關聯數組很有用。「

the manual