Re: multi dimensional array question
| From: | Nick Balestra | Date: | Sat, 01 May 2010 18:54:21 +0000 |
| Subject: | Re: multi dimensional array question | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-304819@lists.php.net to get a copy of this message | ||
Thanks! I'll agree with you abotu ur points, i just started php few days ago..so i am in the
first phase of learnign it...and this list is so gr8! thanks evrybody
cheers, Nick
On May 1, 2010, at 6:11 PM, Programming Guides wrote:
> On Fri, Apr 30, 2010 at 7:33 PM, Nick Balestra <nick@beyounic.com> 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