Re: Array group and sum values.

From: Date: Tue, 11 May 2010 19:17:23 +0000
Subject: Re: Array group and sum values.
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-305095@lists.php.net to get a copy of this message
On Tue, May 11, 2010 at 4:03 PM, Jim Lucas <lists@cmsws.com> wrote: > Paul Halliday wrote: >> On Tue, May 11, 2010 at 2:25 PM, Jim Lucas <lists@cmsws.com> wrote: >>> Paul Halliday wrote: >>>> I have this: >>>> >>>> while ($row = mysql_fetch_array($theData[0])) { >>>> >>>>     $col1[] = $row[0]; >>>>     $col2[] = lookup($row[1]); // this goes off and gets the country name. >>>> >>>> I then loop through col1 and col2 to produce something like this: >>>> >>>> 52    ARMENIA >>>> 215   CANADA >>>> 57    CANADA >>>> 261   COLOMBIA >>>> 53    EGYPT >>>> 62    INDIA >>>> 50    INDIA >>>> >>>> Is there a way I can group these? >>>> >>>> Thanks! >>>> >>> Group them?? >>> >>> How about this >>> >>> while ($row = mysql_fetch_array($theData[0])) { >>> >>>    $col1[lookup($row[1])][] = $row[0]; >>> >>> which, using the data you showed, will give you this >>> >>> >>> Array >>> ( >>>    [ARMENIA] => Array >>>        ( >>>            [0] => 52 >>>        ) >>> >>>    [CANADA] => Array >>>        ( >>>            [0] => 215 >>>            [1] => 57 >>>        ) >>> >>>    [COLOMBIA] => Array >>>        ( >>>            [0] => 261 >>>        ) >>> >>>    [EGYPT] => Array >>>        ( >>>            [0] => 53 >>>        ) >>> >>>    [INDIA] => Array >>>        ( >>>            [0] => 62 >>>            [1] => 50 >>>        ) >>> >>> ) >>> >>> -- >>> Jim Lucas >>> >>>   "Some men are born to greatness, some achieve greatness, >>>       and some have greatness thrust upon them." >>> >>> Twelfth Night, Act II, Scene V >>>    by William Shakespeare >>> >> >> I was actually hoping to have them arranged like: >> >> $col1[0] = INDIA >> $col2[0] = 112 >> $col1[1] = CANADA >> $col2[1] = 272 >> ... >> >> Thanks. >> > > Well, then take what I gave you and do this: > > $group[lookup($row[1])][] = $row[0]; > > foreach ( $group AS $x => $y ) > { >        $col1[] = $x; >        $col2[] = array_sum($y); > } > > > In the end you will end up with this > > <plaintext><?php > > $data = array( >                array(52,       'ARMENIA'), >                array(215,      'CANADA'), >                array(57,       'CANADA'), >                array(261,      'COLOMBIA'), >                array(53,       'EGYPT'), >                array(62,       'INDIA'), >                array(50,       'INDIA'), >                ); > > foreach ( $data AS $row ) > { >        $group[$row[1]][] = $row[0]; > } > > print_r($group); > > foreach ( $group AS $x => $y ) > { >        $col1[] = $x; >        $col2[] = array_sum($y); > } > > print_r($col1); > print_r($col2); > > Perfect! and a lot simpler than I thought. Thanks.

« previous php.general (#305095) next »