Autor Zpráva
warking
Profil
Může mi někdo vysvětlit, proč tohle vrací "sude"

$a = 3;

function blabla(){
if($a %2 )
  echo 'liche';
else
  echo 'sude';

}

a tohle vrací "liché"?

function blabla(){
if(3 %2 )
  echo 'liche';
else
  echo 'sude';

}
User
Profil *
function blabla(){
if($a %2 != 0 )
echo 'liche';
else
echo 'sude';

}
warking
Profil
Stále vrátí "sude"
User
Profil *
Pokud napises pouze (x% y) vzdy vrací true
Fisir
Profil
Reaguji na warkinga:
Protože z vnitřku funkce nemůžeš přistupovat k vnějším proměnným. Proměnná $a se tedy funkci blabla() jeví jako nedefinovaná. Když si jí předáš jako parametr, bude to fungovat:
function blabla($a){
if($a %2 )
  echo 'liche';
else
  echo 'sude';
 
}

$a = 3;
blabla($a); // liché
$b = 2;
blabla($b); // sudé

Reaguji na Usera:
Pokud napises pouze (x% y) vzdy vrací true
% je operátor modulo, vrací zbytek po celočíselném dělení. Nevrací true / false. Jestliže je číslo sudé, tak při dělení dvojkou dostaneš zbytek nula, to se převede na false, podmínka nebude splněna a vypíše se „sudé.“ Když je číslo liché, zbyde ti jedna, ta se převede na true, podmínka splněna bude a vypíše se „liché.“
warking
Profil
Super, díky moc Fisir
warking
Profil
Můžu ještě otázku? Když budu mít:

$a = 2; $b = 3;

jde nějak udělat funkce, aby se hodnoty prohodily?
bez použití třetí proměnné
Keeehi
Profil
warking:
$a ^= $b ^= $a ^= $b;
nebo
list($a,$b) = array($b,$a);

Ovšem pokud použiješ třetí proměnnou, tak je to nejrychlejší co se výkonnu týče a i nejlépe čitelné.
warking
Profil
Mám formulář, který odešle na email nějaký text, potřebuji udělat, aby se střídaly 2 věci, které jsou v obsahu emailu, např: přijde email v takovém formátu:

"Dobrý den, pane blabla"

Potřebuji, aby to jednou napsalo "Dobrý den" a po druhý třeba "Dobrý večer" a takhle se to bude střídat po každém odeslaném emailu.

Chtěl jsem to udělat přes zjišťování sudého a lichého čísla, když bude sudé, odešle se jedna možnost, když liché tak druhá možnost a takhle se budou přehazovat, ale to je asi zbytečný a zdlouhavý, nemá někdo lepší nápad jak na to?
Keeehi
Profil
warking:
ale to je asi zbytečný a zdlouhavý
Předpokládám, že ty emaily odesíláš v nějakém cyklu, pak by se to dalo zapsat nějak takto:
mail($to, $subject, $i++ % 2 == 0 ? $message1 : $message2, ...);
s tím, že před cyklem nastavíš $i = 0;

Pokud chceš upravovat opravdu oslovení a nebyl to jen příklad, pak by to chtělo ale dělat na základě denní doby, ne?
warking
Profil
Oslovení byl jen příklad, děkuji, vyzkouším
warking
Profil
Ta inkrementace se provede jen 1x, takže má $i hodnotu 1 a větší mít nebude, protože se vždy definuje $i=0; co s tím? :D, kde ji definovat?
juriad
Profil
warking:
Nejprve je potřeba si ujasnit pár věcí:
1) Posíláš e-maily v nějakém cyklu?
2) Chceš, aby se zpráva měnila každému uživateli nezávisle na ostatních?

Nejspíš si budeš muset v databáze do tabulky uživatelů přidat sloupec, který bude vyjadřovat, jaké - řekněme - oslovení jsi naposledy použil. Při každém odeslání e-mailu tuto hodnotu updateneš.
warking
Profil
1) ano
2) chci aby první odeslaný email přes formulář obsahoval "Dobrý den", další odeslaný email "Dobrý večer", další odeslaný "Dobrý den".... atd

a třeba hodnotu inkrementovat v databázi? protože z toho cyklu tu hodnotu definovanou z venku asi neinkrementuji
Tomáš123
Profil
warking:
Zrejme hodnotu premennej $i nastavuješ vo vnútri cyklu. Použi buď cyklus for:
for($i = 0; $i < $pocet_planovanych_odoslani; $i++) {
  // mail(..., ..., $i % 2 == 0 ? $sprava1 : $sprava2, ...);
}
... alebo cyklus while:
$i = 0;
while($i < $pocet_planovanych_odoslani) {
  // mail(..., ..., $i % 2 == 0 ? $sprava1 : $sprava2, ...);
  $i++;
}
warking
Profil
ale ja nevim dopredu pocet planovanych odeslani, pardon neposilam email v cyklu ale v if podmince


if(isset($_POST['submit'])){
.
.
.
mail($to, $subject, $i % 2 == 0 ? $message1 : $message2, $headers);
}


Neví někdo?
visionic
Profil *
Takze server odesila pouze jeden mail po odeslani formulare. Takze musis nekde definovat pocitani, napriklad v souboru nebo v mysql a to cislo vytahnout a dle licheho nebo sudeho poctu odeslat danej mail. Za par let cislo muze byt 1599, coz je asi zbytecne. Takze udelej if ($x==0); a if ($x==1); a pokud cislo presahne dvojku if ($x==2) { $x=0; } a cislo tim vynulujes.

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: