Autor Zpráva
MilanKarkulka
Profil
Vždy když to takto píši, tak se divím, jestli neexistuje lepší řešení?

if($status==1){ $status_slovem="objednano"; }
if($status==2){ $status_slovem="doruceno"; }
if($status==3){ $status_slovem="nedoruceno"; }
if($status==4){ $status_slovem="reklamovano"; }
juriad
Profil
$status_slovem = [1 => "objednano", "doruceno", "nedoruceno", "reklamovano"][$status];
MilanKarkulka
Profil
Jak se tato metoda jmenuje?


A co kdyby vstupní data byla náhodnější?

if($status==aa){ $status_slovem="objednano"; } 
if($status==bb){ $status_slovem="doruceno"; } 
if($status==b3){ $status_slovem="nedoruceno"; } 
if($status==ctyri){ $status_slovem="reklamovano"; }
pcmanik
Profil
MilanKarkulka:
To nieje žiadna metóda jednoducho zápis poľa. Snáď trochu čitateľnejšie a ten index 1 znamená že pole sa čísluje od 1 a nie od 0.
$status_slovem = array(1 => "objednano", "doruceno", "nedoruceno", "reklamovano")[$status];

Keby boli dáta náhodnejšie musíš dať každému prvku poľa odpovedajúci index, teda aa => objednano, bb => doruceno...
juriad
Profil
Je to prachobyčejné indexování asociativního pole.
php.net/manual/en/language.types.array.php#example-99
MilanKarkulka
Profil
Pořád nejsem nějak spokojený s odpovědí. :) Jak by jste tedy napsali něco takovéto?

if($status==1){ echo "objednano"; } 
if($status==2){ echo "doruceno"; } 
if($status==3){ echo "nedoruceno"; } 
if($status==4){ echo "reklamovano"; }
Keeehi
Profil
MilanKarkulka:
Pořád nejsem nějak spokojený s odpovědí. :) Jak by jste tedy napsali něco takovéto?
Pořád stejně
echo [1 => "objednano", "doruceno", "nedoruceno", "reklamovano"][$status];
juriad
Profil
echo [1 => "objednano", "doruceno", "nedoruceno", "reklamovano"][$status];

pcmanik:
Přímé indexování pole je možné of PHP 5.5, zatímco jeho konstrukce pomocí hranatých závorek jde už od PHP 5.4, tedy tvůj zápis s array() nepředstavuje žádnou výhodu.
smitka
Profil
A nebo postaru:

switch ($status) {
    case 1:
        echo "objednano"; break;
    case 2:
        echo "doruceno"; break;
    case 3:
        echo "nedoruceno"; break;
    case 4:
        echo "reklamovano"; break;
}

Výhoda oproti ifům je, že procházení skončí při první shodě.
pcmanik
Profil
juriad:
Verzia PHP 5.4 je zastaralá a skončila jej podpora, takže nemá zmysel sa ňou zaoberať. Jediné na čo som poukázal je že zápis pomocou array môže byť v kóde prehľadnejší ako len zátvorky - zrejme preto aj vznikla otázka ako sa tá metóda volá.
CZechBoY
Profil
Nebo si můžeš udělat třídu s konstantama tvých stavů a budeš moci používat i porovnání pomocí konstanty někde zvenku.
Nebo si udělat pro ten stav vlastní typ a budeš to mít i oop.

class ProductStatus
{
  const OBJEDNANO = 1;
  const DORUCENO = 2;
  const NEDORUCENO = 3;
  const REKLAMOVANO = 4;
  
  public function getPossiblePairs()
  {
    return array_flip(array_change_key_case((new ReflectionClass(get_called_class()))->getConstants(), CASE_LOWER));
  }
}
midlan
Profil
Doporučuji se vyvarovat řešení od CZechBoY. Je to nečitelná magie. Kdyby někdo takový projekt pak přebíral, přibylo by mu pak hodně vrásek. Jediné místo, kde bych takový kód akceptoval by byl dobře zdokumentovaný framework.
abc
Profil
Mě to teda magické nepřijde vůbec. Prostě si vyrobíš jednu parent třídu pro všechny číselníky, tu metodu dáš tam a můžeš takhle používat konstanty všude.
Navíc by měla být ještě statická
CZechBoY
Profil
abc: jj tohle používám v Base* třídě pro číselníky a mám to ve statické metodě. Kradeš mi zdrojáky? :D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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