Martin,

Here's an example of what I implemented (simplified down again).

As you can see, it's hideously simple and not optimized in the least.

It works well on small datasets, but you can see by looking at it that large
datasets get exponentially slower.

    while ($row = mysql_fetch_assoc($result)) {
        $found = false;
        $count = count($vehicles);
        for ($j = 0; $j < $count; $j++) {
            if (   $vehicles[$j]['dealer_id'] == $row['dealer_id'] &&
$vehicles[$j]['vehicle_id'] == $row['vehicle_id'] ) {
                $vehicles[$j][$row['company_id']] = $row['page_views'];
                $found = true;
            }
        }
        if (!$found) {
            $vehicles[$i]['dealer_id'] = $row['dealer_id'];
            $vehicles[$i]['vehicle_id'] = $row['vehicle_id'];
            $vehicles[$i][$row['company_id']] = $row['page_views'];
        }

        $i++;
    }



Morgan Grubb.


"Martin Towell" <[EMAIL PROTECTED]> wrote in message
6416776FCC55D511BC4E0090274EFEF508A54E@EXCHANGE">news:6416776FCC55D511BC4E0090274EFEF508A54E@EXCHANGE...
> this sort of merging would be easier to do when you create the array
> (unless you need the other format for something else?)
>
> -----Original Message-----
> From: Morgan Grubb [mailto:[EMAIL PROTECTED]]
> Sent: Friday, June 28, 2002 11:09 AM
> To: [EMAIL PROTECTED]
> Subject: [PHP] Fast code to partially flatten an array based on several
> keys?
>
>
> I have a large dataset which can contain many different fields, and I'm
> trying to flatten them in such a way that I can display it happily in a
> table.
>
> To simplify: I'm populating the array such (many many more fields, but
these
> will do):
>
>     $i = 0;
>     while ($row = mysql_fetch_assoc($result)) {
>         $vehicles[$i]['dealer_id'] = $row['dealer_id'];
>         $vehicles[$i]['vehicle_id'] = $row['vehicle_id'];
>         $vehicles[$i][$row['company_id']] = $row['page_views'];
>         $i++;
>     }
>
> Now, if that vehicle_id and dealer_id combination exist, instead of adding
> it as another record completely,
> just add
>
>     $vehicles[$existing_id][$row['company_id']] = $row['page_views'];
>
> The end result of this would be (if given two 'company_id' records for the
> given dealer):
>
> (
>     [0] => Array
>         (
>             [dealer_id] => 645
>             [vehicle_id] => 35073
>             [1] => 10
>         )
>
>     [1] => Array
>         (
>             [dealer_id] => 645
>             [vehicle_id] => 35073
>             [0] => 6
>         )
> )
>
> Turns into:
>
> (
>     [0] => Array
>         (
>             [dealer_id] => 645
>             [vehicle_id] => 35073
>             [1] => 10
>             [0] => 6
>         )
> )
>
> Can anyone think of a fast way to do this either during creation of the
> array or after the array has been created? (A sort of fast_flatten($array)
> function) ?
>
> If anyone can think of something, I'd be really appreciative.
>
>
>
> Cheers,
> Morgan Grubb.
>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to