Olika sättt att korta ned ett IF-statement i PHP

Permalänk
Medlem

Olika sättt att korta ned ett IF-statement i PHP

Hej!

Är ganska ny på PHP men kände ändå att det vore kul att kunna lite mer om, så har börjat laborera lite bara för att lära mig.

Försöker mig på att göra någon form av enkel konverterare mellan dataenheter (Kilobit till Megabyte osv.) och har kommit fram till nedanstående kod, som visserligen fungerar. Däremot känns det som att det kanske finns smidigare sätt att skriva ut allt på?

Det är alltså en superenkel konverterare där man skriver in ett numeriskt värde i en ruta (t.ex) 10. Därefter väljer man kanske Megabyte i dropdown-listan (from) och kanske Gigabyte i den andra listan (to). Beroende på vilka alternativ man väljer används sedan en viss uträkning för att få det inskrivna talet att konverteras korrekt.

Inser att jag kan använda "elseif" istället för en massa if för att få loopen att sluta när något stämmer. Dock kommer det oavsett bli en himla massa IF-satser att skriva ut för att täcka alla möjliga konverteringsmöjligheter. Finns det någon annan PHP-teknik annat än IF för att få det lite mer kompakt? Eller ska man skriva på något mer kompakt sätt?

Som sagt, ganska ny på PHP. Men det var sjukt kul så vill gärna lär mig mera

Koden är inte färdig på något sätt, så bortse gärna från de faktiska uträkningarna som säkert inte är korrekta ännu!

<?php // Om knappen tryckts ned if(isset($_POST['submit'])) { // Kolla så det är ett nummer som skrivits in if(is_numeric($_POST['number1'])) { if($_POST['from'] == $_POST['to']) /* If both are the same */ { $total = $_POST['number1'] * '1'; } if(($_POST['from'] == 'kilobit') && ($_POST['to'] == 'kilobyte')) { $total = $_POST['number1'] * '0.125'; } if(($_POST['from'] == 'kilobit') && ($_POST['to'] == 'megabyte')) { $total = $_POST['number1'] * '0.000125'; } if(($_POST['from'] == 'kilobit') && ($_POST['to'] == 'gigabyte')) { $total = $_POST['number1'] * '0.000000125'; } if(($_POST['from'] == 'kilobit') && ($_POST['to'] == 'terabyte')) { $total = $_POST['number1'] * '0.000000000125'; } if(($_POST['from'] == 'kilobyte') && ($_POST['to'] == 'kilobit')) { $total = $_POST['number1'] * '8000'; } if(($_POST['from'] == 'megabit') && ($_POST['to'] == 'megabyte')) { $total = $_POST['number1'] * '0.125'; } if(($_POST['from'] == 'megabyte') && ($_POST['to'] == 'megabit')) { $total = $_POST['number1'] * '8'; } // Skriv ut resultatet echo "<h1>{$_POST['number1']} {$_POST['from']} är {$total} {$_POST['to']}</h1>"; } else { // Om det inte är ett tal som skrivits in echo 'Du får bara skriva siffror'; } } ?>

Permalänk
Medlem
Visa signatur

Moderkort: Gigabyte X570 Aorus Master | CPU: AMD Ryzen R9 5900X | CPU-kylare: Noctua NH-D15 chromax.black | RAM: Corsair Vengeance LPX 64 GB (4x16) DDR4-3600 CL18 | GPU: Gigabyte RTX 4080 Eagle OC | SSD: 2 x Samsung 970 EVO Plus 1 TB NVMe + Kingston A400 480 GB + Samsung QVO860 1 TB | PSU: EVGA SuperNOVA G2 1000 W Gold | Chassi: Lian Li O11 Dynamic XL | Skärm: BenQ PD3200U @ 3840x2160 + ASUS ROG Strix XG32VQ @ 2560x1440 | Tangentbord: Corsair K68 RGB Cherry MX Red | Mus: Logitech MX Master 2S

Permalänk
Medlem

@cyklonen: Ja! Det såg ju lite mer kompakt ut Ska läsa på lite mer. Tack!

Permalänk
Medlem

Är det inte lättare att ha en lista på faktorer beroende på valt värde?

Ta input och omvandla till antal bits, omvanlda med faktor för önskad output. Inga IF-satser som behövs då.

Edit: Du kan använda associativa arrayer för detta: https://www.w3schools.com/php/php_arrays_associative.asp
I exemplet är nycklar namn, men dina nycklar är ex. kilobit etc. värdet är sedan faktorn du multiplicerar med.

Visa signatur

data, representation av värden, text etc. lämpad för överföring, tolkning eller bearbetning av människor eller maskiner.
dator, digital automatisk beräkningsmaskin som styrs av ett i dess minne lagrat program.

Permalänk
Medlem

@Strepto: Ah, det var nog något åt det här hållet jag tänkte att det borde finnas. Hänger inte riktigt med än, men får läsa lite mera helt enkelt! Jättetack för styrningen i rätt riktning

Permalänk
Medlem

Jag har inte jätte koll på PHP, men så här gjorde jag i Python för att ange strl, kanske kan vara till hjälp.

def formatFileSize(self, num): step_unit = 1000.0 for x in ['bytes', 'KB', 'MB', 'GB', 'TB']: if num < step_unit: return "%3.1f %s" % (num, x) num /= step_unit

Visa signatur

AMD 7800X3D | ASUS TUF X670E-PLUS | Corsair Vengeance DDR5 32GB EXPO | ASUS TUF 4090 OC 24GB |
Noctua NH-U12A | Corsair 4000D | Corsair AX1200W | Steelseries Apex 7 | Steelseries Sensei Ten | ASUS VG35VQ

https://github.com/Mariusz89B