Re: multi dimensional array question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 30, 2010 at 7:33 PM, Nick Balestra <nick@xxxxxxxxxxxx> wrote:

> thanks Piero!
>
> i was trying to solve an excercise on "learning php5" (O'reilyl) book.
>
> I am happy abotut his solution with the array_sum funtion you suggested,
> and my multidimensional array make much more sense to mee then they
> suggested solution that also much more line of code comapred...
>
> look: my solution (with Piero suggeston): and ont he bottom the book
> solution. what do u say is the best one? why? i am learning so i am
> interested in understanding why a solution can be better then an other...
>
> $us_census = array('NY' => array('New York' => 8008278),
>                                   'CA' => array('Los Angeles' => 3694820,
>                                                                 'San Diego'
> => 1223400),
>                                   'IL' => array('Chicago' => 2896016),
>                                   'TX' => array('Houston' => 1953631,
>                                                                 'Dallas' =>
> 1188580,
>                                                                 'San
> Antonio' => 1144646),
>                                   'PA' => array('Philadelphia' => 1517550),
>                                   'AZ' => array('Phoenix' => 1321045),
>                                   'MI' => array('Detroit' => 951270));
>
>
>
> print
> "<table><tr><th>State</th><th>City</th><th>Population</th><th>Total</th></tr>";
>
>
> foreach ($us_census as $state => $cities) {
>
>         foreach ($cities as $city => $habitants){
>
>                 $tothabitants += $habitants;
>
>                print
> "<tr><td>$state</td><td>$city</td><td>$habitants</td><td></td></tr>";
>                }
>        }
>
> print "<tr><td></td><td></td><td></td><td>$tothabitants</td></tr></table>";
>
>
> foreach ($us_census as $state => $cities) {
>     $population_per_state = array_sum($cities);
>     print "$state $population_per_state<br>";
> }
>
> --------------------------
> the book solution:
>
>
> $population = array('New York' => array('state' => 'NY', 'pop' => 8008278),
> 'Los Angeles' => array('state' => 'CA', 'pop' => 3694820),
> 'Chicago' => array('state' => 'IL', 'pop' => 2896016),
> 'Houston' => array('state' => 'TX', 'pop' => 1953631),
> 'Philadelphia' => array('state' => 'PA', 'pop' => 1517550),
> 'Phoenix' => array('state' => 'AZ', 'pop' => 1321045),
> 'San Diego' => array('state' => 'CA', 'pop' => 1223400),
> 'Dallas' => array('state' => 'TX', 'pop' => 1188580),
> 'San Antonio' => array('state' => 'TX', 'pop' => 1144646),
> 'Detroit' => array('state' => 'MI', 'pop' => 951270));
>
> $state_totals = array( );
> $total_population = 0;
> print "<table><tr><th>City</th><th>Population</th></tr>\n";
> foreach ($population as $city => $info) {
>
>
> $total_population += $info['pop'];
>
> $state_totals[$info['state']] += $info['pop'];
> print "<tr><td>$city, {$info['state']}</td><td>{$info['pop']}</td></tr>\n";
> }
>
> foreach ($state_totals as $state => $pop) {
> print "<tr><td>$state</td><td>$pop</td>\n";
> }
> print "<tr><td>Total</td><td>$total_population</td></tr>\n";
> print "</table>\n";
>
>
>
>
>
I actually prefer your solution - it's easier to read and understand. On the
other hand the solution the book offers has the advantage of being more
extensible in that more pieces of information can be added per city.

One thing I dont like about both solutions is that they both intertwine
computation logic with presentation. A *much* better approach in this case
is to first calculate all population data you need and put together one data
structure that has all of that. Only after you have that ready do you begin
to output HTML. And while outputting HTML the only PHP you should need is to
iterate over your data structure and output.

-- 
http://programming-guides.com

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux