TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   General (http://www.talkphp.com/general/)
-   -   Sorting an Array (http://www.talkphp.com/general/4893-sorting-array.html)

Hightower 08-25-2009 10:24 AM

Sorting an Array
 
Hey folks,

I have an array like this:
Code:

Array (
        [1] => Array (
                [team_name] => Steelers FC
                [played] => 2
                [points] => 4
                [won] => 1
                [drawn] => 1
                [lost] => 0
                [for] => 5
                [against] => 3
                [goal_difference] => 2
        ) [2] => Array (
                [team_name] => Bishop Middleham
                [played] => 2
                [points] => 1
                [won] => 0
                [drawn] => 1
                [lost] => 1
                [for] => 3
                [against] => 5
                [goal_difference] => -2
        )
)

I need to sort it like a league table, so:

Points DESC,
For DESC,
Goal diff DESC

Anybody know how I would achieve this?

The final array might have 12/13/14 different entries in it rather than just the two shown.

Village Idiot 08-25-2009 02:10 PM

This is really what databases are for, why do you have unsorted arrays this large?

If it must stay in an array, this algorithm is what I can give you off the top of my head (there are probably much more efficient ways of doing this):
Objective: To sort rows by points then for then goal:
1. Bubble sort by name
2. Split the array by name
3. Sort by for in each group
4. Split each of those arrays by for.
5. Sort by goals in each group.
6. Merge them back together.

Memory won't be an issue with only a few rows, but don't do this with hundreds of rows. This has potential to be a memory monster.

Hightower 08-25-2009 02:33 PM

I didn't even think! The data has come from a database, and it should be sorted in the query - duh and thanks!

Village Idiot 08-25-2009 02:34 PM

It happens, best of luck.

Hightower 08-25-2009 04:19 PM

Ah, in fact that's no good come to think of it. I have a database which I retrieve data from, I then work on it (calculations and stuff) and store it in an array so I can easily pass it. Therefore I can't perform MySQL sorts on the data as the data is not ready to be sorted at that stage.

So, any idea's?

hello-world 08-25-2009 06:26 PM

I think you can you this function
PHP Code:

array_multisort() 

I read once in a book.
I see if could solve your next problem.

PHP Code:

$shop = array( array( 'team-name' => "rose"
                      
'played' => 64,
                      
'poinst' => 1,
                      
'won' => 6,
                      
'draw' => 4,
                      
'lost' => 2,
                      
'for' =>2,
                       
                    ),
               array(
'team-name' => "rose"
                      
'played' => 25,
                      
'poinst' => 5,
                      
'won' => 7,
                      
'draw' => 6,
                      
'lost' => 4,
                      
'for' =>2,
                    ),
               array(
'team-name' => "rose"
                      
'played' => 125,
                      
'poinst' => 15,
                      
'won' => 1,
                      
'draw' => 5,
                      
'lost' => 25,
                      
'for' =>2,
                    )
             );
             foreach(
$shop as $key => $value){
                 echo 
"<pre>";
                 echo 
$key; echo "=>";
                 foreach (
$value as $key => $value){
                     echo 
$key ."=>".$value;
                         echo 
"<br>";
                 }    
                 
             }
             
             echo 
"<hr>";

              foreach (
$shop as $key => $row) {
                
$won[$key]  = $row['lost'];
                
$draw[$key] = $row['draw'];
        }

   
array_multisort($won,$draw $shop);
     
    foreach(
$shop as $key => $value){
                 
                 echo 
$key; echo "=>";
                 foreach (
$value as $key => $value){
                     echo 
$key ."=>".$value;
                         echo 
"<br>";
                 }    
                 
             } 



All times are GMT. The time now is 10:25 PM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0