2012-04-26 85 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