简体   繁体   中英

Sorting multidimensional array by key alphabetically

Trying to sort by this multidimensional array by screen name:

//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;

Sort function:

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; }
}

As an example, screen names are currently in this order even after I run the sort function:

newUser
Chris
Carlos
Jason

I am probably applying the sort at the wrong time but after looking at other similar examples here I was having trouble with this, any help is appreciated, thanks!

First of all, you're sorting an individual item there, where you probably want to sort the actual list, $member_list. Also, you're trying to sort an array where you initialize an object. Either initialize an array or sort an object.

If I assume you really want to play with arrays, like you imply on the subject, this might be something you're trying to do:

<?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] =>
        )

)
*/

ksort - "Sorts an array by key, maintaining key to data correlations. This is useful mainly for associative arrays."

See the manual

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM