Autor Zpráva
Martínek
Profil *
Ahoj,
jak tohle jde napsat líp, není to už prasárna? :)

<input ....... '.($row == 1 ? 'green' : ''.($row == 2 ? 'red' : ''.($row == 3 ? 'blue' : '').'').'').'.... />


Díky

PS: ještě jeden dotaz

proč tohle funguje

....($row == 1 ? 'green' : '').....


a tohle ne

....($row == 1 ? 'green').....


Díky
Majkl578
Profil
Je víc možností.

První:
if ($row == 1) {
  $color = 'green';
} elseif ($row == 2) {
  $color = 'red';
} elseif ($row == 3) {
  $color = 'blue';
} else {
  $color = '';
}

echo '<input ....... ' . $color . '.... />';

Druhá:
$colors = array(
  1 => 'green',
  2 => 'red',
  3 => 'blue',
);

echo '<input ....... ' . (isset($colors[$row]) ? $colors[$row] : '') . '.... />';

Třetí je třeba switch a určitě by se našly další.
php
Profil *
Já bych doporučil switch už jen proto, že je o dvě třetiny rychlejší než if a hlavně dá se tam nastavit defaultní hodnota, což v poli neuděláš.
Martínek
Profil *
Majkl578:
Nemyslím normální podmínky, ale zkrácené, pak píšu 5 podmínek a kód je to na 100 řádků místo 10 řádků ;)

Díky
Majkl578
Profil
[#3] php:
To by mě zajímalo, kde jsi k té informaci přišel. Jsou totiž téměř stejně rychlé. A u if jde samozřejmě defaultní hodnota taky, větví else.
php
Profil *
Osobně si myslím, že používání zkrácených zápisů není moc dobrý.
1)Když pak totiž někdo ten kód po tobě potřebuje upravit, tak s tím je spousta práce.
2)Pak taky ten tvůj první zápis
<input ....... '.($row == 1 ? 'green' : ''.($row == 2 ? 'red' : ''.($row == 3 ? 'blue' : '').'').'').'.... />

je dokonce pomalejší než funkce if
3)Kdybys k tomu dělal dokumentaci tak bude hodně nepřehledná, díky těmhle zkráceným zápisům.
4)Když zkrácený zápisy tak opravdu jen ty nejjednodušší ( if($i++%2) )
5)Když si někde takhle nahuštěný kód někam uložíš a po nějakém čase se k němu zase vrátíš, tak sám budeš mít problémy mu porozumět.
TomášK
Profil
php:
Nejrychlejší bude skoro určitě to pole, ale nepředpokládám, že by to někdo použil na takový počet hodnot, aby to bylo vůbec měřitelné. Defaultní hodnotu tam uděláš pomocí isset, dokonce je v Majklově578 kódu.
php
Profil *
Majkl578:
A u if jde samozřejmě defaultní hodnota taky, větví else.

Nechci se hádat ale asi sis nepřečet poslední vedlejší větu, ta defaultní hodnota byla myšlena k
$colors = array(
  1 => 'green',
  2 => 'red',
  3 => 'blue',
);.....


a kde sem přišel k těm dvou třetinám? - praxí
Majkl578
Profil
php:
Ternární operátor pomalejší je, ale standardní větvení ne.

asi sis nepřečet poslední vedlejší větu
Nejspíš. Nicméně i v poli tohoto charakteru by šlo defaultní hodnotu uvést (víme-li, že klíče jsou číselné), třeba takto:
$colors = array(
  1 => 'green',
  2 => 'red',
  3 => 'blue',
  'default' => '',
);
S použitím:
(isset($colors[$row]) ? $colors[$row] : $colors['default'])
Výhodu to má asi jednu - vše se definuje na stejném místě.
php
Profil *
$x = null;
$start = microtime();
if ( $x == null ){
    echo "if time: ";
}
else{
    echo "if time: ";
}
$end = microtime();
$result = $end-$start;
echo $result;


$start = microtime();
switch ( $x ){
    case null:
        echo "switch time:";
        break;
    default:
        echo "switch time:";
}
$end = microtime();
$result = $end - $start;
echo $result;



a výsledek:
if time: 2.6999999999999E-5switch time:8.9999999999812E-6

v tomhle případě je switch téměř 10x rychlejší…, ale záleží i na spoustě jiných věcí, ať už na verzích softwaru na serveru tak jeho HW, ale každému sedí něco jiného a switch se taky nedá použít všude a ve většině případů je i zbytečný jej používat. Každopádně co mám tak zkušenosti, tak v průměru mi to vychází opravdu tak o ty dvě třetiny, samozřejmě neměří všechno. Skutečnost může být jiná, jak tvrdíš, asi sem měl zrovna štěstí na velký rozdíly. :)
php
Profil *
matika bez kalkulačky mi moc nejde, takže se opravuju z 10x na 3x :)
TomášK
Profil
php:
Tenhle benchmark můžeš rovnou zahodit, měříš příliš krátké úseky a jak říkáš, záleží na spoustě jiných věcí - kolik na ten program vyjde strojového času, jak dlouho čeká na paměť apod. Zkoušel jsem ho a vrací řádově jiná čísla při po sobě jdoucích bězích, rychlejší je většinou to, co je ve skriptu jako první, bez ohledu na to, jestli to je if nebo switch.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0