given: $num_cols and $num_items

        $num_with_extra = $num_items % $num_cols;
        $num_per_col = floor($num_items / $num_cols);

the first $num_with_extra columns has $num_per_col+1 items in it
and the rest have $num_per_col items in it

(not tested in code, but looks okay in theory...)

Martin

> -----Original Message-----
> From: Matt Grimm [mailto:[EMAIL PROTECTED]
> Sent: Thursday, 8 January 2004 9:37 AM
> To: [EMAIL PROTECTED]
> Subject: [PHP] Re: Sorting data into columns vertically
> 
> 
> Well you didn't say you wanted a dynamic number of columns...
> 
> What's the problem with the solution 102, 101, 101?  That's 
> the count of the
> elements in each column -- you said in a 7 member array, you 
> wanted 3 items
> in the first column, and two in the other two columns.  
> That's 3, 2, 2,
> which the code will give you.  If you want, echo the other 
> variables and it
> will make more sense.
> 
> --
> Matt Grimm
> 
> 
> "Dareal Hamsta" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED]
> > I get:
> >
> > Your columns are: 102, 101, 101
> >
> > ???
> >
> > The other problem with this solution is that it's for a 
> static number of
> > columns, however I'm looking for a solution with dynamic 
> variables. For
> > example, I might want 4 columns with 100 items, or six 
> columns with 15.
> >
> > Thanks for trying though.
> >
> > adam
> >
> >
> > >From: Matt Grimm <[EMAIL PROTECTED]>
> > >To: [EMAIL PROTECTED]
> > >Subject: Re: Sorting data into columns vertically
> > >Date: Wed, 07 Jan 2004 11:39:48 -0900
> > >
> > >Try this:
> > >
> > >// Populate an array of random length
> > >for ($i = 0; $i < rand(300, 600); $i++) {
> > >     $l_aTest[] = '...';
> > >}
> > >$l_iLength = count($l_aTest);
> > >$l_iLow = floor($l_iLength / 3);
> > >$l_iHigh = ceil($l_iLength / 3);
> > >$l_iMod = $l_iLength % 3;
> > >
> > >$l_iFirst  = $l_iHigh;
> > >$l_iSecond = ($l_iMod < 2 ? $l_iHigh - $l_iMod : $l_iHigh);
> > >$l_iThird  = $l_iLow;
> > >
> > >echo "<p><strong>Your columns are: $l_iFirst, $l_iSecond,
> > >$l_iThird</strong></p>";
> > >
> > >--
> > >Matt Grimm
> > >Web Developer
> > >The Health TV Channel, Inc.
> > >(a non - profit organization)
> > >3820 Lake Otis Parkway
> > >Anchorage, AK 99508
> > >907.770.6200 ext. 686
> > >907.336.6205 (fax)
> > >E-mail: [EMAIL PROTECTED]
> > >Web: www.healthtvchannel.org
> > >
> > >
> > >"Dareal Hamsta" <[EMAIL PROTECTED]> wrote in message
> > >news:[EMAIL PROTECTED]
> > > > [ Please copy me off list. ]
> > > >
> > > > Say I have 7 items of data and I wish to sort them into 
> 3 columns in a
> > >HTML
> > > > table. The items are unevenly sized, so rather than 
> print them out in
> > >rows -
> > > > resulting in lots of wasteful whitespace - I would like 
> to output them
> > >in
> > > > vertical order. However if I use the modulus operator 
> to check for
> when
> > >to
> > > > break into a new column...
> > > >
> > > > foreach ($items as $item) {
> > > > $counter++;
> > > > if ( ($counter % $columns) == 0) {
> > > > print "</td><td>";
> > > > }
> > > > }
> > > >
> > > > ...the output will be something like this...
> > > >
> > > >   +-------+-------+-------+
> > > >   | Item1 | Item4 | Item7 |
> > > >   | Item2 | Item5 |       |
> > > >   | Item3 | Item6 |       |
> > > >   +-----------------------+
> > > >
> > > > ...when what I'm really looking for is this...
> > > >
> > > >   +-------+-------+-------+
> > > >   | Item1 | Item4 | Item6 |
> > > >   | Item2 | Item5 | Item7 |
> > > >   | Item3 |       |       |
> > > >   +-----------------------+
> > > >
> > > > Obviously if the number of items and columns are 
> static, I have no
> > >problem,
> > > > but how do I get a layout that appeals to people and 
> not computers if
> > > > they're dynamic? This has me befuddled, I'm wondering 
> is there an
> > >algorithm
> > > > for doing it or is it effectively a Turing Test.
> > > >
> > > > Thanks,
> > > > adam
> > > >
> > > >
> > > > <?php
> > > > $s=array(74,65,112,104,112,72,32,59,45,41);
> > > > for($i=0;$i<count($s);$i++){echo'&#'.$s[$i].';';}
> > > > ?>
> > > >
> > > > 
> _________________________________________________________________
> > > > MSN 8 with e-mail virus protection service: 2 months FREE*
> > > > http://join.msn.com/?page=features/virus
> > >
> > >
> > >
> >
> > _________________________________________________________________
> > Add photos to your messages with MSN 8. Get 2 months FREE*.
> > http://join.msn.com/?page=features/featuredemail
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> __________ Information from NOD32 1.594 (20040107) __________
> 
> This message was checked by NOD32 for Exchange e-mail monitor.
> http://www.nod32.com
> 
> 
> 
> 

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

Reply via email to