Martin, I said I'd let you know how I got on.
It's all working, but only realistically for no more than 500 or so records. When I feed it 10000+ records, the machine chokes. So I'm back to textbooks just looking for clues on really fast sorting and searching algorithms. I've written a mostly working quicksort routine, which seems to have cut the time down significantly on searches, so I'll keep plugging away at this. Of course, now that it *appears* to be working, I'm getting a lot more work dumped on me, so finishing it off is going to take a bit longer. =) Morgan Grubb. "Martin Towell" <[EMAIL PROTECTED]> wrote in message 6416776FCC55D511BC4E0090274EFEF508A550@EXCHANGE">news:6416776FCC55D511BC4E0090274EFEF508A550@EXCHANGE... > This is what I came up with before I saw this email, and "eek", we think the > same (sorta) > > This is going to be a bit iffy, but here goes (BTW: this hasn't been tested, > so expect heaps of errors :) ) > > $i = 0; > while ($row = mysql_fetch_assoc($result)) { > for ($j = 0, $found = false; $j < $i && !$found; $j++) { > if ($vehicles[$j]['dealer_id'] == $row['dealer_id'] && > $vehicles[$j]['vehicle_id'] == $row['vehicle_id']) { > $found = true; > $idx = $j > } > } > if (!$found) { > $idx = $i; > $i++; > } > $vehicles[$idx]['dealer_id'] = $row['dealer_id']; > $vehicles[$idx]['vehicle_id'] = $row['vehicle_id']; > $vehicles[$idx][$row['company_id']] = $row['page_views']; > } > > The other thing I just thought of is: can $row['dealer_id'] and > $row['vehicle_id'] be indexes to the array > $vehicles[$row['dealer_id']][$row['vehicle_id']][$row['company_id']] > = $row['page_views']; > > so you'd get something like (manually created result...): > ( > [645] => Array > ( > [35073] => Array > ( > [1] => 10 > [0] => 6 > ) > ) > ) > > -----Original Message----- > From: Morgan Grubb [mailto:[EMAIL PROTECTED]] > Sent: Friday, June 28, 2002 11:35 AM > To: [EMAIL PROTECTED] > Subject: Re: [PHP] Fast code to partially flatten an array based on > several keys? > > > 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 -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php