Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 05-12-2008, 02:16 AM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default How can I sort a multidimensional array using php?

I have always done all my sorting of data within the sql query, however for once, i need to do it in php and since ive never done this in php, i'm a bit stumped, hoping someione can assist...

My array looks like this:

PHP Code:


Array
(
    [
0] => Array
        (
            [
groupid] => 66
            
[name] => SOTE
            
[description] => Lorem ipsum dolor sit amet 
            
[sc_ispd] => 1
            
[dateline] => 1204247554
        
)

    [
1] => Array
        (
            [
groupid] => 88
            
[name] => LOS 
            
[description] => Lorem ipsum dolor sit amet
            
[sc_ispd] => 0
            
[dateline] => 1204779261
        
)

    [
2] => Array
        (
            [
groupid] => 1
            
[name] => MEGA
            
[description] => Lorem ipsum dolor sit amet
            
[sc_ispd] => 1
            
[dateline] => 1202601980
        
)

    [
3] => Array
        (
            [
groupid] => 86
            
[name] => CRABS
            
[description] => Lorem ipsum dolor sit amet
            
[sc_ispd] => 1
            
[dateline] => 1204777825
        
)


What I need to do is re-sort it as if doing the sort in sql like so:
ORDER BY sc_ispd DESC, dateline DESC, groupid DESC

I'm pretty sure i need to use array_multisort() to do this, but having some difficulty with it. Is it even possible to do what i am trying to do here?
Reply With Quote
  #2  
Old 05-12-2008, 04:56 AM
MoT3rror MoT3rror is offline
 
Join Date: Mar 2007
Posts: 423
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
foreach($array AS $key => $value)
{
       
$arraykeys["$key"] = $value['sc_ispd'];
}

rsort($arraykeys);

foreach(
$arraykeys AS $key)
{
    
$data $array["$key"];

This is how I did it but bet there is probably a better way that I wish I knew how to do. Also you can replace rsort with any array sort function.
Reply With Quote
  #3  
Old 05-12-2008, 07:21 PM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks - that worked for sorting on one criteria, however since i need to sort on multiple criteria, I had to dig around a bit but finally found a function on php.net with works for me and i'll post it here for others:

PHP Code:
/**
* Sorts a multidimensional array by more than one sort values (originally written by Raveler)

* @param    array    The multidimensional array we are trying to sort
* @param    overload    The sort criteria is overloaded as "sort1", ASC, "sort2" DESC, etc...

* @return    array        sorted array
*/
function sc_sortarray() 
{
    
$arguments func_get_args();
    
$array $arguments[0];
    
$code '';
    for (
$c 1$c count($arguments); $c += 2
    {
        if (
in_array($arguments[$c 1], array("ASC""DESC"))) 
        {
            
$code .= 'if ($a["'.$arguments[$c].'"] != $b["'.$arguments[$c].'"]) {';
            if (
$arguments[$c 1] == "ASC"
            {
                
$code .= 'return ($a["'.$arguments[$c].'"] < $b["'.$arguments[$c].'"] ? -1 : 1); }';
            }
            else 
            {
                
$code .= 'return ($a["'.$arguments[$c].'"] < $b["'.$arguments[$c].'"] ? 1 : -1); }';
            }
        }
    }
    
$code .= 'return 0;';
    
$compare create_function('$a,$b'$code);
    
usort($array$compare);
    return 
$array;

Proper syntax would be like follows:
$array = sc_sortarray($array, "sc_ispaid", DESC, "dateline", DESC, "groupid", DESC);
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 10:10 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.03691 seconds
  • Memory Usage 2,206KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (3)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (3)post_thanks_box
  • (3)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (3)post_thanks_postbit_info
  • (3)postbit
  • (3)postbit_onlinestatus
  • (3)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete