Registreren

    Informatie

    Het is heel gemakkelijk om lid te worden. Door je gegevens op te geven op de registratie pagina ontvang je automatisch een email met je inlog gegevens.

  • Registreer je hier

Aanmelden

    Informatie

    Omdat je niet aangemeld bent is het gebruikerspaneel niet beschikbaar. Vul hiernaast je gegevens in om gebruik te maken van het gebruikerspaneel.

Aanmeldformulier


Modulus

PHP is een scripttaal, die bedoeld is om op webservers dynamische webpagina's te creëren. PHP is in 1994 ontworpen door Rasmus Lerdorf, een senior software engineer bij IBM. Destijds was de taal duidelijk geïnspireerd door Perl.

Aanvankelijk stonden de letters PHP voor Personal Home Page (de volledige naam was Personal Home Page/Forms Interpreter, PHP/FI). Sinds PHP 3.0 is de betekenis een recursief acroniem geworden: PHP: Hypertext Preprocessor.

Modulus

Berichtdoor Theo » 03 Sep 2008 21:34

Inleiding
Modulus is een wiskundige functie die ook in de meeste programmeertalen terugkomt. Daarbij ook in PHP. Dit artikel legt je uit hoe modulus werkt en hoe je het kan gebruiken.


Modulus
Bron: Wikipedia.

De modulus (ook wel modulo genoemd) is een vast getal (bijvoorbeeld 7). Van een bepaald getal trek je zo vaak mogelijk de modulus af. Het getal dat je overhoud is de rest. Bij modulus 7 zijn de getallen die als rest kunnen overblijven de getallen 0, 1, 2, 3, 4, 5, 6. Het getal 7 zelf natuurlijk niet, want dan is de rest gewoon 0.

Bijvoorbeeld:

23 % 7
3 x 7 = 21, rest is 2

48 % 7
6 x 7 = 42, rest is 6


Praktisch gebruik
Nu vraag je jezelf wellicht af wat jij hier aan hebt. De modulo is erg handig wanneer je gegevens in kolommen weer wilt geven. In het volgende voorbeeld willen we na elke 3 afbeeldingen een enter.

PHP
Code: Alles selecteren
<?php
// Afbeeldingen array
$afbeeldingen = array(
   "afb1.jpg",
   "afb2.jpg",
   "afb3.jpg",
   "afb4.jpg",
   "afb5.jpg",
   "afb6.jpg",
   "afb7.jpg",
   "afb8.jpg",
   "afb9.jpg",
   "afb10.jpg" );
 
// Tabel beginnen
echo "<table border=\"1\">\n";
echo "\t<tr>\n";
 
// De teller initialiseren
$i = 0;
 
// Door de afbeeldingen loopen
foreach( $afbeeldingen as $afbeelding )
{
   // Indien $i modulo 3 gelijk is aan nul de tabelrij eindigen en een nieuwe beginnen
   // Dit geldt enkel wanneer $i groter is dan nul
   if( ( $i % 3 ) == 0 and ( $i != 0 ) )
   {
      echo "\t</tr>\n";
      echo "\t<tr>\n";
   }
 
   
// Afbeelding weergeven in een tabelcel
   echo "\t\t<td>" . $afbeelding . "</td>\n";
   
   
// Teller met één verhogen
   $i++;
}
?>

Het commentaar in de code legt uit wat het precies doet. De code zal het volgende resultaat hebben. Een rondje stelt een afbeelding voor.

0 0 0
0 0 0
0 0 0
0


Modulo en tabellen
Wanneer we verschillende gegevens van diverse maten hebben (korte teksten/lange teksten, grote afbeeldingen/kleine afbeeldingen) dan willen we deze natuurlijk netjes uitlijnen. Dus echte kolommen creeëren. Tabellen zijn hierbij de oplossing. Hierbij gaat het gebruik van de modulo een niveau hoger.

Wederom werk ik met een voorbeeld, om het uit te leggen. Het commentaar in de code licht toe wat bepaalde delen doen.

PHP
Code: Alles selecteren
<?php
// Afbeeldingen array
$afbeeldingen = array(
   "afb1.jpg",
   "afb2.jpg",
   "afb3.jpg",
   "afb4.jpg",
   "afb5.jpg",
   "afb6.jpg",
   "afb7.jpg",
   "afb8.jpg",
   "afb9.jpg",
   "afb10.jpg" );
 
// Tabel beginnen
echo "<table border=\"1\">\n";
echo "\t<tr>\n";
 
// De teller initialiseren
$i = 1;
// Door de afbeeldingen loopen
foreach( $afbeeldingen as $afbeelding )
{
   // Afbeelding weergeven in een tabelcel
   echo "\t\t<td>" . $afbeelding . "</td>\n";
   
   
// Indien $i modulo 3 gelijk is aan nul de tabelrij eindigen en een nieuwe beginnen
   if( ( $i % 3 ) == 0 )
   {
      echo "\t</tr>\n";
      echo "\t<tr>\n";
   }
   
   
// De teller met één verhogen
   $i++;
}
 
// Tabel afmaken
echo "\t</tr>\n";
echo "</table>";
?>

Wanneer we naar de broncode van het resultaat kijken zien we het volgende:

HTML
Code: Alles selecteren
<table border="1">
   <tr>
      <td>afb1.jpg</td>
      <td>afb2.jpg</td>
      <td>afb3.jpg</td>
   </tr>
   <tr>
      <td>afb4.jpg</td>
      <td>afb5.jpg</td>
      <td>afb6.jpg</td>
   </tr>
   <tr>
      <td>afb7.jpg</td>
      <td>afb8.jpg</td>
      <td>afb9.jpg</td>

   </tr>
   <tr>
      <td>afb10.jpg</td>
   </tr>
</table>

Zoals je ziet klopt het niet helemaal. We missen namelijk twee tabelcellen in de laatste tabelrij. Om dit op te lossen voegen we code toe die deze opvult. Het totale script wordt dan:

PHP
Code: Alles selecteren
<?php
// Afbeeldingen array
$afbeeldingen = array(
   "afb1.jpg",
   "afb2.jpg",
   "afb3.jpg",
   "afb4.jpg",
   "afb5.jpg",
   "afb6.jpg",
   "afb7.jpg",
   "afb8.jpg",
   "afb9.jpg",
   "afb10.jpg" );
 
// Tabel beginnen
echo "<table border=\"1\">\n";
echo "\t<tr>\n";
 
// De teller initialiseren
$i = 0;
 
// Door de afbeeldingen loopen
foreach( $afbeeldingen as $afbeelding )
{
   // Indien $i modulo 3 gelijk is aan nul de tabelrij eindigen en een nieuwe beginnen
   // Dit geldt enkel wanneer $i groter is dan nul
   if( ( $i % 3 ) == 0 and ( $i != 0 ) )
   {
      echo "\t</tr>\n";
      echo "\t<tr>\n";
   }
 
   
// Afbeelding weergeven in een tabelcel
   echo "\t\t<td>" . $afbeelding . "</td>\n";
   
   
// Teller met één verhogen
   $i++;
}
// Lege cellen opvullen:
if ( ( $i % 3 ) != 0 )
{
   // Herhaaldelijk tabelcellen toevoegen.
   echo str_repeat( "\t\t<td> </td>\n", ( 3 - ( $i % 3 ) ) );
}
 
// Tabel afmaken
echo "\t</tr>\n";
echo "</table>";
?>

Wat is er nu anders? Na de while() {} zie je nu een if() {}. Wanneer $i modulus 3 geen nul is betekent dat de rij nog niet is afgesloten en er dus cellen missen. Met de functie str_repeat() herhalen we een lege cel. Het aantal keer wordt berekent aan de hand van de som 3 - ( $i % 3 ).

De uiteindelijke code resulteert in:

HTML
Code: Alles selecteren
<table border="1">
   <tr>
      <td>afb1.jpg</td>
      <td>afb2.jpg</td>
      <td>afb3.jpg</td>
   </tr>
   <tr>
      <td>afb4.jpg</td>
      <td>afb5.jpg</td>
      <td>afb6.jpg</td>
   </tr>
   <tr>
      <td>afb7.jpg</td>
      <td>afb8.jpg</td>
      <td>afb9.jpg</td>

   </tr>
   <tr>
      <td>afb10.jpg</td>
      <td> </td>
      <td> </td>
   </tr>
</table>

Zoals je ziet worden nu de twee laatste tabelcellen wel weergeven, met een spatie erin.


Tabelrijen kleuren
Met tabellen kun je eenvoudig grote hoeveelheden data weergeven. Wanneer de gegevens veel op elkaar lijken wordt het soms wazig voor je ogen zodra je het doorleest. Om dit te voorkomen kun je de rijen om en om verschillende kleuren geven. Hierdoor blijft het beeld wat rustiger en overzichtelijker. Ook hiervoor kunnen we modulus gebruiken. Wederom een voorbeeld:

PHP
Code: Alles selecteren
<?php
$kleur1 
= "#eeeeee";
$kleur2 = "#cccccc";
 
$i 
= 1;
 
echo 
"<table border=\"1\">\n";
 
for( $x = 0; $x < 6; $x++ )
{
   // Kleur bepalen via een verkorte if-else statement
   $bg_kleur = ( $i % 2 == 0 ) ? $kleur1 : $kleur2;
   
   
// Tabelrij en cel weergeven
   echo "\t<tr>\n";
   echo "\t\t<td style=\"background-color: " . $bg_kleur . "\">" . $x . "</td>\n";
   echo "\t</tr>\n";
   
   
// Teller met één verhogen
   $i++;
}
 
echo 
"</table>";
?>

Het HTML resultaat hiervan is:

HTML
Code: Alles selecteren
<table border="1">
   <tr>
      <td style="background-color: #cccccc">0</td>
   </tr>
   <tr>
      <td style="background-color: #eeeeee">1</td>
   </tr>
   <tr>
      <td style="background-color: #cccccc">2</td>
   </tr>
   <tr>
      <td style="background-color: #eeeeee">3</td>
   </tr>
   <tr>
      <td style="background-color: #cccccc">4</td>
   </tr>
   <tr>
      <td style="background-color: #eeeeee">5</td>
   </tr>
</table>
Theo
Oprichter
 
Berichten: 1795
Geregistreerd: 11 Jun 2005 17:43
Woonplaats: in_array()

Terug naar PHP



Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast


cron