Mensen,
HELP!
Ik ben al 3 uur bezig om een recordset te verdelen over 5 rijtjes. Dus bij 10 resultaten wil ik dan dit:
Res 1 Res 3 Res 5 Res 7 Res 9
Res 2 Res 4 Res 6 Res 8 Res 10
Bij aantallen die niet deelbaar zijn door 5 moet hij beginnen met rijtjes die groter zijn dan 1/5 van het totaal om zo het verschil te regelen, dus 9 records wordt:
Res 1 Res 3 Res 5 Res 7 Res 9
Res 2 Res 4 Res 6 Res 8
En 13 wordt:
Res 1 Res 4 Res 7 Res 10 Res 12
Res 2 Res 5 Res 8 Res 11 Res 13
Res 3 Res 6 Res 9
enz. enz.
Ongetwiijfeld heel simpel als je het even door hebt, maar ik zit zoals gezegd al 3 uur te stoeien met tellertjes, modulo enz. enz. enz. maar het komt keer op keer niet uit voor bepaalde scenario's... Iemand een simpel idee?
- Opdelen recordset in 5 delen
-
12-06-2013, 20:59 #1Particulier
- Berichten
- 703
- Lid sinds
- 17 Jaar
Opdelen recordset in 5 delen
-
14-06-2013, 11:54 #2Particulier
- Berichten
- 42
- Lid sinds
- 18 Jaar
Re: Opdelen recordset in 5 delen
Hallo Erwin,
Hierbij een beginnetje om je op te weg helpen:
PHP Code:<?php
$arr = array( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 );
$numPerRow = 5;
$arrSize = count( $arr );
$numRows = ceil( $arrSize / $numPerRow );
echo "<table border='1'>\n";
for( $row=0; $row<$numRows; $row++ )
{
echo "\t<tr>\n";
for( $x=0; $x<$numPerRow; $x++ )
{
$value = $arr[ $row + ( $x * $numRows ) ];
echo "\t\t<td>" . ( isset( $value ) ? $value : " " ) . "</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
?>
res 01 res 04 res 07 res 10
res 02 res 05 res 08 res 11
res 03 res 06 res 09 res 12
Terwijl je denk ik dan dit wilt:
res 01 res 04 res 07 res 09 res 11
res 02 res 05 res 08 res 10 res 12
res 03 res 06
-
14-06-2013, 12:02 #3Particulier
- Berichten
- 703
- Lid sinds
- 17 Jaar
Re: Opdelen recordset in 5 delen
Klopt, dan wil ik inderdaad:
Terwijl je denk ik dan dit wilt:
res 01 res 04 res 07 res 09 res 11
res 02 res 05 res 08 res 10 res 12
res 03 res 06
-
14-06-2013, 13:04 #4Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: Opdelen recordset in 5 delen
Even zonder te testen:
$columnCount = 4;
$block = array();
for ($i=0; i<count($input); i++) {
$row = $i % 4;
$column = floor($i / $columnCount)
$block[$row][$column] = $input[$i]
}
Dan heb je een mooie twee-dimensionale array waar je alles uit kunt trekken zoals je wilt.
EDIT: Pardon; zie dat je anders wilt orienteren... even op puzzelen :PLaatst aangepast door Henry Been : 14-06-2013 om 13:09
-
14-06-2013, 13:09 #5Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: Opdelen recordset in 5 delen
Ah, ik zie dat je hem anders wilt orienteren, namelijk in kolommen.
Alternatief:
PHP Code:$columnCount = 4;
$totalCount = count($input);
$atLeastPerColumn = floor($totalCount / $columnCount);
$noOfColumnsWithOneMore = $totalCount % $columnCount;
$block = array()
$row = 0; $column = 0;
for($i=0; $i<$totalCount; $i++) {
if (($row == $atLeastPerColumn && $column >= $noOfColumnsWithOneMore) || $row> $atLeastPerColumn) {
$row = 0;
$column++;
}
$block[$row][$column] = $input[$i];
$row++;
}
Laatst aangepast door Henry Been : 14-06-2013 om 18:32
-
15-06-2013, 11:46 #6Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: Opdelen recordset in 5 delen
En? ben je er nog uitgekomen?
-
16-06-2013, 15:02 #7Particulier
- Berichten
- 703
- Lid sinds
- 17 Jaar
Re: Opdelen recordset in 5 delen
Nee, nog niet... Heb nog even niet helder hoe ik de uitkomsten van mijn query in jouw $input krijg, daar moet ik nog even op puzzelen!
Edit: dat voor elkaar maar krijg nog 0,0 output...Laatst aangepast door Erwin S. : 16-06-2013 om 21:13
-
17-06-2013, 15:05 #8Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: Opdelen recordset in 5 delen
Dat klopt natuurlijk. Je hebt een array met resultaten gemaakt. Die moet je nu nog printen
twee for loopjes nesten voor rij en kolom en gaan
-
18-06-2013, 17:15 #9Particulier
- Berichten
- 703
- Lid sinds
- 17 Jaar
Re: Opdelen recordset in 5 delen
Sorry, maar met jouw code kom ik echt niet uit... $input komt voor mij uit de lucht vallen enz. Dus ik snap het echt niet.
-
19-06-2013, 08:39 #10
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: Opdelen recordset in 5 delen
$input is de set met resultaten die je terugkrijgt uit de database.
$block is de nieuwe (multidimensionale) array waar je nu op deze manier je resultaten in hebt staan (bij het voorbeeld van 13 stuks):
rij 1:
$block[0][0];
$block[0][1];
$block[0][2];
$block[0][3];
$block[0][4];
rij 2:
$block[1][0];
$block[1][1];
$block[1][2];
$block[1][3];
$block[1][4];
rij 3:
$block[2][0];
$block[2][1];
$block[2][2];
Nu kun je dus een <table> maken waarbij je rij voor rij de cellen opbouwt. Ik heb dat even getest en het werkt prima dus complimenten aan Henry voor een prima antwoord.
-
19-06-2013, 13:54 #11Particulier
- Berichten
- 153
- Lid sinds
- 13 Jaar
Re: Opdelen recordset in 5 delen
Bedankt voor ´t compliment!
@Erwin; mocht je er nou echt niet uit komen, post dan eens je poging. Dat laat ons zien waar je staat en dan kunnen we ook beter helpen.
-
19-06-2013, 21:54 #12Particulier
- Berichten
- 703
- Lid sinds
- 17 Jaar
Re: Opdelen recordset in 5 delen
@Henry: wat ik nu heb is het volgende:
$sql = " SELECT productcategorieid, productcategorie
FROM .......";
$res = mysql_query($sql) or die(mysql_error());
$input = array();
while ($row_user = mysql_fetch_assoc($res))
{
$input[] = $row_user['productcategorieid'];
}
$columnCount = 5;
$totalCount = count($userifo);
$atLeastPerColumn = floor($totalCount / $columnCount);
$noOfColumnsWithOneMore = $totalCount % $columnCount;
$block = array();
$row = 0; $column = 0;
for($i=0; $i<$totalCount; $i++) {
if (($row == $atLeastPerColumn && $column >= $noOfColumnsWithOneMore) || $row> $atLeastPerColumn) {
$row = 0;
$column++;
}
$block[$row][$column] = $input[$i];
$row++;
}
echo $block[0][0];
-
20-06-2013, 00:25 #13Particulier
- Berichten
- 200
- Lid sinds
- 15 Jaar
Re: Opdelen recordset in 5 delen
doe gewoon even zelf debuggen met wat print_r's en dan die();
Zo kun je uiteindelijk zelf zien waar het verkeerd gaat.
-
20-06-2013, 06:52 #14
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: Opdelen recordset in 5 delen
Je berekent de lengte van array $userifo terwijl je net $input hebt gevuld.
-
23-06-2013, 20:20 #15Particulier
- Berichten
- 703
- Lid sinds
- 17 Jaar
Re: Opdelen recordset in 5 delen
Juist... Eindelijk begint het te dagen, ik ben er bijna:
$userinfo = array();
while ($row_user = mysql_fetch_assoc($res))
{
$userinfo[$row_user['productcategorieid']] = $row_user['productcategorie'];
}
$columnCount = 5;
$totalCount = count($userinfo);
$atLeastPerColumn = floor($totalCount / $columnCount);
$noOfColumnsWithOneMore = $totalCount % $columnCount;
$block = array();
$row = 0; $column = 0;
for($i=0; $i<$totalCount; $i++) {
if (($row == $atLeastPerColumn && $column >= $noOfColumnsWithOneMore) || $row> $atLeastPerColumn) {
$row = 0;
$column++;
}
$block[$row][$column] = $userinfo[$i];
$row++;
}
print_r($block);
Ik liep nog tegen 2 dingen aan:
1. De arrays beginnen pas bij 1 i.p.v. 0 en ik testte regelmatig met 0
2. Zoals te zien is bouw ik mijn arrays nu op met id én waarde. Deze wil ik beide gebruiken omdat ik de waarde wil echo'en als naam en het id gebruiken voor mijn URL. Is dit nog mogelijk?
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic