Jump to content

order array based on value inside it


aebstract

Recommended Posts

I can look at a normal sort all day and not know how to apply it to something that needs to be sorted in a more specialized way.

Array

(

    [4.70 Index] => Array

        (

            [0] => Array

                (

                    [firstname] => Scott

                    [lastname] => Underwood

                    [q1] => 4.730

                    [q2] => 4.706

                    [q3] => 4.706

                    [regid] => 28

                    [eventid] => 1

                    [bq] => 4.706

                )

 

            [1] => Array

                (

                    [firstname] => Randy

                    [lastname] => Alexander

                    [q1] => 4.822

                    [q2] => 4.755

                    [q3] => 4.755

                    [regid] => 119

                    [eventid] => 1

                    [bq] => 4.755

                )

 

            [2] => Array

                (

                    [firstname] => Mike

                    [lastname] => Ghee

                    [q1] => 99.999

                    [q2] => 5.045

                    [q3] => 5.045

                    [regid] => 120

                    [eventid] => 1

                    [bq] => 5.045

                )

 

            [3] => Array

                (

                    [firstname] => Kenny

                    [lastname] => Acree

                    [q1] => 4.730

                    [q2] => 4.730

                    [q3] => 4.730

                    [regid] => 117

                    [eventid] => 1

                    [bq] => 4.730

                )

 

            [4] => Array

                (

                    [firstname] => Jody

                    [lastname] => Voyles

                    [q1] => 99.999

                    [q2] => 4.973

                    [q3] => 4.973

                    [regid] => 123

                    [eventid] => 1

                    [bq] => 4.973

                )

 

            [5] => Array

                (

                    [firstname] => Jeremy

                    [lastname] => Ellis

                    [q1] => 5.044

                    [q2] => 5.044

                    [q3] => 5.044

                    [regid] => 114

                    [eventid] => 1

                    [bq] => 5.044

                )

 

            [6] => Array

                (

                    [firstname] => Jeff

                    [lastname] => Wilkerson

                    [q1] => 5.026

                    [q2] => 4.902

                    [q3] => 4.902

                    [regid] => 217

                    [eventid] => 1

                    [bq] => 4.902

                )

 

            [7] => Array

                (

                    [firstname] => Isreal

                    [lastname] => Deraney

                    [q1] => 4.794

                    [q2] => 4.732

                    [q3] => 4.732

                    [regid] => 122

                    [eventid] => 1

                    [bq] => 4.732

                )

 

            [8] => Array

                (

                    [firstname] => Blake

                    [lastname] => Wilder

                    [q1] => 4.685

                    [q2] => 5.161

                    [q3] => 5.023

                    [regid] => 121

                    [eventid] => 1

                    [bq] => 4.685

                )

 

        )

 

)

 

With this array being $indexH, my $var = Index 4.70.

I'm trying to change their order in Index 4.70, the [0],[1],[2], etc. Based on the value of the bq field in that array.

Array
(
    [4.70 Index] => Array
        (
            [0] => Array
                (
                    [firstname] => Kenny
                    [lastname] => Acree
                    [q1] => 4.730
                    [q2] => 4.730
                    [q3] => 4.730
                    [regid] => 117
                    [eventid] => 1
                    [bq] => 4.730
                )

            [1] => Array
                (
                    [firstname] => Blake
                    [lastname] => Wilder
                    [q1] => 4.685
                    [q2] => 5.161
                    [q3] => 5.023
                    [regid] => 121
                    [eventid] => 1
                    [bq] => 4.685
                )

            [2] => Array
                (
                    [firstname] => Jeremy
                    [lastname] => Ellis
                    [q1] => 5.044
                    [q2] => 5.044
                    [q3] => 5.044
                    [regid] => 114
                    [eventid] => 1
                    [bq] => 5.044
                )

            [3] => Array
                (
                    [firstname] => Randy
                    [lastname] => Alexander
                    [q1] => 4.822
                    [q2] => 4.755
                    [q3] => 4.755
                    [regid] => 119
                    [eventid] => 1
                    [bq] => 4.755
                )

            [4] => Array
                (
                    [firstname] => Scott
                    [lastname] => Underwood
                    [q1] => 4.730
                    [q2] => 4.706
                    [q3] => 4.706
                    [regid] => 28
                    [eventid] => 1
                    [bq] => 4.706
                )

            [5] => Array
                (
                    [firstname] => Isreal
                    [lastname] => Deraney
                    [q1] => 4.794
                    [q2] => 4.732
                    [q3] => 4.732
                    [regid] => 122
                    [eventid] => 1
                    [bq] => 4.732
                )

            [6] => Array
                (
                    [firstname] => Jody
                    [lastname] => Voyles
                    [q1] => 99.999
                    [q2] => 4.973
                    [q3] => 4.973
                    [regid] => 123
                    [eventid] => 1
                    [bq] => 4.973
                )

            [7] => Array
                (
                    [firstname] => Mike
                    [lastname] => Ghee
                    [q1] => 99.999
                    [q2] => 5.045
                    [q3] => 5.045
                    [regid] => 120
                    [eventid] => 1
                    [bq] => 5.045
                )

            [8] => Array
                (
                    [firstname] => Jeff
                    [lastname] => Wilkerson
                    [q1] => 5.026
                    [q2] => 4.902
                    [q3] => 4.902
                    [regid] => 217
                    [eventid] => 1
                    [bq] => 4.902
                )

        )

)

Not tested. Just demonstrating something.

<?php
function compare ($a, $b) {
     if (!array_key_exists('bq', $a) || !array_key_exists('bq', $b)) return -1;
     if ($a['bq'] == $b['bq']) return 0;
     return $a['bq'] < $b['bq'] ? 1 : -1; // switch to reverse the ordering
}

foreach ($arr as $key => $value) {
     uasort($arr[$key], 'compare');
}

This orders based on bq, but it's moving them out of their array's main name to another.

 

foreach ($indexH[$var] as $key => $value) {

    uasort($indexH[$var], 'compare');

}

 

$index contains 4 arrays, set by $var. I also ran in to an error, which is odd. After it ran through the first array of the 4, it cut the script short and produced:

 

Fatal error: Cannot redeclare compare() (previously declared in /home/orsca/public_html/ladders.php:183) in /home/orsca/public_html/ladders.php  on line 183

Can't post the full array due to it being too long, but. It's moving people out of their index in to another. So this array has 4: 4.70 index, 5.30 index, 6.00 index, 7.00 index. My final output was:

 

Array
(
    [4.70 Index] => Array
        (
            [7] => Array
                (
                    [firstname] => Mike
                    [lastname] => Ghee
                    [q1] => 99.999
                    [q2] => 5.045
                    [q3] => 5.045
                    [regid] => 120
                    [eventid] => 1
                    [bq] => 5.045
                )

            [2] => Array
                (
                    [firstname] => Jeremy
                    [lastname] => Ellis
                    [q1] => 5.044
                    [q2] => 5.044
                    [q3] => 5.044
                    [regid] => 114
                    [eventid] => 1
                    [bq] => 5.044
                )

            [6] => Array
                (
                    [firstname] => Jody
                    [lastname] => Voyles
                    [q1] => 99.999
                    [q2] => 4.973
                    [q3] => 4.973
                    [regid] => 123
                    [eventid] => 1
                    [bq] => 4.973
                )

            [8] => Array
                (
                    [firstname] => Jeff
                    [lastname] => Wilkerson
                    [q1] => 5.026
                    [q2] => 4.902
                    [q3] => 4.902
                    [regid] => 217
                    [eventid] => 1
                    [bq] => 4.902
                )

            [3] => Array
                (
                    [firstname] => Randy
                    [lastname] => Alexander
                    [q1] => 4.822
                    [q2] => 4.755
                    [q3] => 4.755
                    [regid] => 119
                    [eventid] => 1
                    [bq] => 4.755
                )

            [5] => Array
                (
                    [firstname] => Isreal
                    [lastname] => Deraney
                    [q1] => 4.794
                    [q2] => 4.732
                    [q3] => 4.732
                    [regid] => 122
                    [eventid] => 1
                    [bq] => 4.732
                )

            [0] => Array
                (
                    [firstname] => Kenny
                    [lastname] => Acree
                    [q1] => 4.730
                    [q2] => 4.730
                    [q3] => 4.730
                    [regid] => 117
                    [eventid] => 1
                    [bq] => 4.730
                )

            [4] => Array
                (
                    [firstname] => Scott
                    [lastname] => Underwood
                    [q1] => 4.730
                    [q2] => 4.706
                    [q3] => 4.706
                    [regid] => 28
                    [eventid] => 1
                    [bq] => 4.706
                )

            [1] => Array
                (
                    [firstname] => Blake
                    [lastname] => Wilder
                    [q1] => 4.685
                    [q2] => 5.161
                    [q3] => 5.023
                    [regid] => 121
                    [eventid] => 1
                    [bq] => 4.685
                )

        )

)


Fatal error: Cannot redeclare compare() (previously declared in /home/orsca/public_html/ladders.php:183) in /home/orsca/public_html/ladders.php on line 183

 

 

Not just the error, but the people are being put in to 4.70 when they are in other classes.

I think I was mistaken and this was correct, but what about the error?

 

Fatal error: Cannot redeclare compare() (previously declared in /home/orsca/public_html/ladders.php:183) in /home/orsca/public_html/ladders.php on line 183

 

It appears once it gets through the first array "4.70 Index" and moves on to the next "5.30 Index".

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.