Autor | Zpráva | ||
---|---|---|---|
Návštěvník Profil * |
#1 · Zasláno: 2. 2. 2014, 10:55:28
Nevíte proč je tato podmínka nefunkční?
$s = $defaultSelected===null && $i == 0 ? ' selected' : ( ( !$this->isCustomValues AND $defaultSelected===$i ) or ( $this->isCustomValues AND $defaultSelected===$this->customValues[$i] ) ) ? ' selected':''; echo ( "'".$defaultSelected."'"."==="."'".$this->customValues[$i]."'"." is same as ".( $this->isCustomValues AND $defaultSelected===$this->customValues[$i] )."<br>" ); Můj výstup: '2'==='2' is same as '2'==='3' is same as '2'==='4' is same as '2'==='1' is same as Uvozovky jsem tam dal jen aby bylo vidět že to není string. Očekával bych že na výstupu bude '2'==='2' is same as 1 isCustomValues je pole předané metodě: $options->acceptBWScore_vals = array( 0,2,3,4,1 ); $defaultSelected je položka ze vstupu z databáze, kde je číslo. Podmínkou $defaultSelected===$this->customValues[$i] jsem chtěl ověřit jestli hodnota je číslo, nula nebo prázdný řetězec, ale zdá se že je to vyhodnoceno jako řetězec. |
||
Joker Profil |
#2 · Zasláno: 2. 2. 2014, 11:08:19
Návštěvník:
Nejjednodušší bude si všechny ty hodnoty vypsat přes var_dump. A bude hned zřejmé, kde je problém. |
||
Návštěvník Profil * |
#3 · Zasláno: 2. 2. 2014, 11:18:12
Joker:
Tak var_dump($defaultSelected); var_dump($this->customValues[$i]); dává string(1) "2" int(2) jsem to tušil že ten formulář z toho options value="1" no a teď mi poraď jak to teda mám porovnat, abych z prázdného řetězce neudělal nulu. A myslíš že je chyba když option value má uvozovky? Nebo to ten vstup je vždy automaticky jako string? |
||
Joker Profil |
#4 · Zasláno: 2. 2. 2014, 11:31:42
Návštěvník:
„jsem to tušil že ten formulář z toho options value="1"“ No tak samozřejmě, formulářová data přijdou vždycky jako string. A pak je to jasné, 2 === "2" je false. „teď mi poraď jak to teda mám porovnat, abych z prázdného řetězce neudělal nulu“ Převést číslo na řetězec a porovnat to spolu jako řetězce. |
||
Návštěvník Profil * |
#5 · Zasláno: 2. 2. 2014, 11:47:22
Joker:
Díky. Ještě že tě tu máme, protože já už to začal psát přes is_numeric()?int()...: |
||
Joker Profil |
#6 · Zasláno: 2. 2. 2014, 12:17:55
Návštěvník:
To by bylo jednodušší místo === použít == .
Ale pochopitelně nelze na číslo převádět v situaci, kdy "0" a "" mají být dvě různé hodnoty, protože pak ten prázdný řetězec není možné na číslo zkonvertovat.
Ale jestli cílem je použít zadané číslo pokud je zadané a jinak nějakou výchozí hodnotu, šlo by to udělat nějak takhle: $vychozi = 42; $cislo = (isset($_POST["cislo"]) && ($_POST["cislo"] != "")) ? (int)$_POST["cislo"] : $vychozi; |
||
Časová prodleva: 8 dní
|
|||
Návštěvník Profil * |
#7 · Zasláno: 10. 2. 2014, 16:52:57 · Upravil/a: Návštěvník
Joker:
Zjistil jsem opět že můj kód opět není funkční. A ještě ke všemu výpis z var_dump mi nedává smysl. Snažil jsem se udělat metodu, která bude defaultně hledat shodu voleb který byly automaticky vygenerovány tak, že jsou číslovány od 0 do x. Tedy hledám shodu čísel. To v třídě odpovídá přepínači !$this->isCustomValues. Ten problém co jsem chtěl vyřešit a chci stále, v této diskusi je, to druhé rozšíření, tedy aby bylo možné porovnávat i value typu string. I když vypisuju options po řadě od $i=0 nula do $i=x, tak hodnoty mohou mít různé čísla nebo hodnoty, ale nemají být ve shodě s $i, tedy hledám shodu předvolby načtené ze sloupce v databázi s value. Toto odpovídá přepínači !$this->isCustomValues Tady je můj nezdařený postup: $s = $defaultSelected===null && $i == 0 ? ' selected' : /** podmínka nikdy nebude true!!! -------> **/ // string // integer ! ( ( !$this->isCustomValues AND $defaultSelected===$i ) or ( $this->isCustomValues AND (string) $defaultSelected===(string) $this->customValues[$i] ) ) ? ' selected':''; Dodávám testovací kód: if ($defaultSelected==$i AND $this->customValues[$i]=2){ echo "<b>"; var_dump((string) $defaultSelected); echo "</b>"; var_dump((string) $this->customValues[$i]); echo "<br>"; } else echo $i." ".$this->customValues[$i]."<br>"; Mě vypisuje řadu čísel: http://paste.ofcode.org/feD7LfgNFy3tpeBkzBzY6x kde var_dump((string) $defaultSelected); var_dump((string) $this->customValues[$i]); string(2) " 2" string(1) "2" No a já teď nemohu přijít na to jak proboha může napsat něco jako string(1) "2" Předpokládal jsem, že je li string "2" pak by měl tisknout string(1). Nebo co znamená to číslo v závorce? Oprava: Předpokládal jsem, že je li string "2" pak by měl tisknout string(2). Nebo co znamená to číslo v závorce? |
||
Joker Profil |
Návštěvník:
Tradiční chyba: if ($defaultSelected==$i AND $this->customValues[$i] = 2){ „Nebo co znamená to číslo v závorce?“ Délku řetězce. Poprvé tam je mezera a dvojka, proto string(2), po druhé jen dvojka, takže string(1). |
||
Návštěvník Profil * |
#9 · Zasláno: 10. 2. 2014, 17:10:27 · Upravil/a: Návštěvník
Joker:
Já mám dneska opravdu vygumováno. Nemohu přijít na to, proč se mi nevybere ta defaultní položka (chybu s přiřazením jsem už opravil). Joker: Poprvé tam je mezera a dvojka, proto string(2) Aha! |
||
Časová prodleva: 10 let
|
0