Autor Zpráva
Návštěvník
Profil *
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
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 *
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
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 *
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
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;
Návštěvník
Profil *
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]);
vypsal:
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){
Místo porovnání tam je přiřazení.

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 *
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!

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:

0