Ik probeer een kleurentabel te maken in stappen van 15, want dan kom je mooi uit op 255.
Ik wil de waarden 0, 15,30...255 in een dropdown-list. Hoe krijg ik dat voor elkaar?
Ik heb zoiets geschreven als

<?php
echo <<<FORM
<form method="POST" action="$thisfile">
<label for <?$rr ?>Roodwaarde</label>
<Select>
FORM;
for ($rr=0; $rr<=255; $rr+15) {
	$Achtergrondkleur=$rr;
	$Voorgrondkleur=255-$rr;
	echo "Achtergrondkleur= " $Achtergrondkleur;
	echo "Voorgrondkleur= " $Voorgrondkleur;
	echo "<option". <? $Achtergrondkleur ?>.">";
};
?>


Ik krijg dit dit op mijn scherm:
"Roodwaarde: " met een dropdown-icoon zonder inhoud.

Hoe krijg ik inhoud in de dropdown-list?
De eerste stap is om te kijken hoe een Select-box in HTML is opgebouwd.
Oké,
Ik was vergeten de sluit-tag voor select te plaatsen.

Maar mijn belangrijkste vraag gaat over de for...next-lus.
Wil je daar specifiek naar kijken?

Ik denk wel dat ik eruit kom met HTML, al vind ik het wel lastiger in combinatie met PHP.

Bij voorbaat dank,
Ronald.
Bijna goed: het is "+=" ipv "+" in het 3e deel van de for():
<?php

for ($rr=0; $rr<=255; $rr+=15) ...

?>
Mocht je vaker een loop nodig hebben die van waarden 0 tot en met 255 gaat, dan is het efficiënter om dat maar 1 keer te laten berekenen en de resultaten op te slaan in een array.
Daarna kan je zo vaak als je maar wilt gebruik maken van het array, en hoef je niet meer na te denken over de logica. Bijvoorbeeld:
[code]
<?php
$per15=[];$n=-10;while($n<111){$per15[]=base_convert($n+=10,15,10);}
foreach($per15 as $rr){print $rr.PHP_EOL;}
Wat is dit voor constructie Ad Fundum? Hoe werkt het?
Ozzie PHP op 23/04/2024 12:33:47

Wat is dit voor constructie Ad Fundum? Hoe werkt het?


Dat wilde ik ook al gaan vragen, bedankt Ozzie.
Ik wil sowieso een oproep plaatsen:
Ik ben heel blij met de oplossingen die gegeven worden, maar het zou zeer prettig zijn als het commentaar uitlegt waar de code voor staat. Dus graag niet alleen de code, maar ook de uitleg erbij.

Bij voorbaat dank.

Ronald
Simpel, $per15 is een array dat met een for loop wordt gevuld met stappen van 15, door de variabele $n te gebruiken in een while loop.
Na het vullen van het array kan je met foreach zo vaak als je wilt dezelfde sequens aflopen, dat scheelt tijd voor het uitrekenen (ten koste van geheugen voor de lookup-table).
Ja, de base_convert() kan natuurlijk net zo goed weg, hij verdonkeremaand waar het echt om gaat. Maar gezien dat dat deel van oplossing al eerder gegeven was door Rob vond ik dit wel een creatief alternatief. Zo kom je nog eens wat anders tegen.

Nou oke, $n wordt elke stap met 10 groter wordt gemaakt, om vervolgens door base_convert() te worden aangezien als stappen van 15 vanwege het 15-tallig talstelsel in het tweede argument. Vervolgens rekent base_convert() dat weer terug naar het decimale talstelsel zodat er stapjes van 15 uitkomen.
Het zal aan mij liggen en het is al laat ... maar wat doet base_convert precies, waarom gebruik je het en wat is het verhaal van die 111?
het commando leidt rechtstreeks naar de handleiding waar het uitgelegd wordt :)

1° parameter is het startgetal in X-base formaat bepaald in parameter 2
binair 1111 = decimaal 15 = hexdecimaal F
en wordt omgevormd naar de 3° parameter

base_convert(22,10,2); = 10110
base_convert(22,10,10); = 22
base_convert(22,10,16); = 16

Die 111 wordt dan gezien param2 (=15) geconverteerd naar 241 param3(10)
base_convert() doet hetzelfde als hexdec(), dechex() en bindec(), en lijkt sterk op octdec() en hex2bin().
Wat mij nu pas opvalt is dat in de documentatie van sommige van die functies zelfs een info of warning-blokje staat met de melding dat je zelf moet oppassen dat je niet te grote integers gebruikt vanwege impliciete type casting naar floats.

In ieder geval zet base_convert() getallen om van en naar verschillende talstels, variërend van 2 tot en met 36. In de documentatie heeft een programmeur zelfs een eigen implementatie in PHP geschreven die nog meer talstelsels aankan. Dus of je nou tot 1 telt voordat je 10 krijgt (binair), tot 9 (decimaal) of tot F (hexacimaal) of tot E (vijftientallig), base_convert() zet het voor je om. In dit geval wordt 0 => 0, 10 => 15, 20 => 30, etc.

Er passen precies 13 stappen van 15 in het rijtje van 0 tot en met 255. Omdat $n elke keer met 10 verhoogd wordt VOORdat $n aan base_convert() wordt meegegeven, loopt $n effectief van 0 tot en met 120 (13 stappen van 10).
Omdat in de while() gebruikt gemaakt wordt van de kleiner-dan operator, in plaats van de kleiner-dan-of-gelijk-aan operator, checkt-ie dat $n kleiner is dan 111, anders zou dat $n <= 110 zijn. Je leest in de code -10 tot 111, maar aan base_convert() wordt 0 tot en met 120 meegegeven in stappen van 10.

Beter leesbaar zou zijn:

<?php
$per15 = Array();
$n = 0;
while ($n <= 120) {
  $per15[] = base_convert($n, 15, 10);
  $n = $n + 10;
}

foreach ($per15 as $rr) {
  print $rr . PHP_EOL;
}
?>

Kortom, voor het maken van stappen van 15 kan je beter de for-lus van Rob gebruiken, dan is het in één keer duidelijk.
Maar het is ook wel wat saai voor het forum. Nog een variatie op hetzelfde thema:

<?php
$per15 = [];
$i = null;
for (;;) {
  $per15[] = base_convert(10 * $i++, 15, 10);
  if ($i > 12) { break; }
}
foreach ($per15 as $rr) {
  print $rr . PHP_EOL;
}
?>

Wat ik daaraan wel weer opmerkelijk vindt is deze constructie:

<?php
$i = null;
print ++$i;  // geeft 1
?>

Dat werkt in SQL niet zo, als je dan een SELECT NULL + 1 doet, is het resultaat NULL.

Zoals PHP werkt, doet mij denken aan een leus van Loesje over de big bang theorie:
"Eerst was er niets en toen is dat nog ontploft ook."
Helaas is die leus gekaapt door evangelisten, maar dat is wel compleet off-topic.

Reageren