2013-02-04 5 views
12

Sono nuovo di PHP e cercando di creare la seguente riducendo al minimo la quantità di codice necessario. PHP dovrebbe mostrare un elenco di 100 quindi visualizzare se il numero è/per 3, 5 o 3 e 5. Se non lo sono, quindi non mostrare nulla.PHP - Se il numero è divisibile per 3 e 5 then echo

Questo è quello che ho finora, ma qualsiasi aiuto sarebbe grande dal momento che non sono sicura del/per 3 e 5 bit come potete vedere qui sotto.

<?php $var = range(0, 100); ?> 
    <table> 
<?php foreach ($var as &$number) { 
echo " <tr> 
    <td>$number</td> 
    <td>"; 

    if($number % 3 == 0) { 
    echo "BY3"; 
} elseif ($number % 5 == 0) { 
    echo "BY5"; 
} elseif ($number % 3 and 5 == 0) { 
     echo "BY3 AND 5"; 
} 
echo "</td></tr>"; 
} 
?> 

    </table> 

Grazie

+1

mi ricorda [Project Euler problema 1] (https://projecteuler.net/problem=1) – HamZa

+0

Questo mi ricorda problema FizzBuzz, ProjectEuler # 1 è un behemoth rispetto a questa domanda. – hijarian

risposta

20

No ... si dovrebbe verificare prima se è divisble per 15 (3x5) (o 3 e 5) e dopo si possono fare altre verifiche:

if($number % 15 == 0) { 
    echo "BY3 AND 5"; 
} elseif ($number % 5 == 0) { 
    echo "BY5"; 
} elseif ($number % 3 == 0) { 
    echo "BY3"; 
} 
echo "</td></tr>"; 

?> 

Perché ogni numero divisibile per 15 è anche divisibile per 3 e 5. Quindi il tuo ultimo controllo non potrebbe mai toccare

4

se sto leggendo la tua domanda corretta allora si sono alla ricerca di:

if ($number % 3 == 0 && $number %5 == 0) { 
     echo "BY3 AND 5"; 
} elseif ($number % 3 == 0) { 
    echo "BY3"; 
} elseif ($number % 5 == 0) { 
    echo "BY5"; 
} 

Versione alternativa:

echo ($number % 3 ? ($number % 5 ? "BY3 and 5" : "BY 3") : ($number % 5 ? "BY 5" : "")); 
+4

Non colpirai mai il terzo condizionale ... perché sia ​​vero, deve essere anche uno dei primi due. – JAAulde

+0

Grazie @JAAulde ho aggiornato e aggiunto l'uno di linea, nonché – Neo

1

Aggiornare il codice come riportato qui di seguito

<?php $var = range(0, 100); ?> 
<table> 
<?php foreach ($var as &$number) 
{ 
echo " <tr> 
<td>$number</td> 
<td>"; 

if($number % 3 == 0 && $number % 5 == 0) 
{ 
    echo "BY3 AND 5"; 
} 
elseif ($number % 5 == 0) 
{ 
echo "BY5"; 
} 
elseif ($number % 3 == 0) 
{ 
    echo "BY3"; 
} 
echo "</td></tr>"; 
} 
?> 

+1

Non sarai mai colpito il terzo condizionale ... per essere vero, uno dei primi due devono essere pure. – JAAulde

+0

ooops ora aggiornato – Deep123

1
<?php 

if($number % 5 == 0 && $number % 3 == 0) { 
    echo "BY3 AND 5"; 
} elseif ($number % 5 == 0) { 
    echo "BY5"; 
} elseif ($number % 3 == 0) { 
    echo "BY3"; 
} else{ 
    echo "NOT BY3 OR 5"; 
} 
?> 
+0

Questo è l'ordine corretto delle operazioni, ma potrebbe essere ulteriormente semplificato. – JAAulde

+0

@JAAulde: come? –

+0

Il mio male non si è riorganizzato grazie @JAAulde per la modifica! – Neo

1
if($number % 15 == 0) 
{ 
    echo "Divisible by 3 and 5"; 
} 
elseif ($number % 5 == 0) 
{ 
    echo "Divisible by 5"; 
} 
elseif ($number % 3 == 0) 
{ 
echo "Divisible by 3"; 
} 
2
$num_count = 100; 
    $div_3 = "Divisible by 3"; 
    $div_5 = "Divisible by 5"; 
    $div_both = "Divisible by 3 and 5"; 
    $not_div = "Not Divisible by 3 or 5"; 

    for($i=0;$i<=$num_count;$i++) 
    { 
     switch($i) 
     { 
      case ($i%15==0): 
      echo $i." (".$div_both.")</br>"; 
      break; 
      case ($i%3==0): 
      echo $i." (".$div_3.")</br>"; 
      break; 
      case ($i%5==0): 
      echo $i." (".$div_5.")</br>"; 
      break; 
      default: 
      echo $i."</br>"; 
      break; 
     } 
    } 
1

Non c'è bisogno di fare tre, se le dichiarazioni:

echo "<table border='1'>"; 

for ($i = 1; $i <= 100; $i++) { 

    echo "<tr><td>{$i}</td><td>"; 

    if ($i % 3 == 0) echo "BY3 "; 
    if ($i % 5 == 0) echo "BY5"; 

    echo "</td></tr>\n"; 
} 
echo "</table>"; 
Problemi correlati