Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:

Zdravim,
potřeboval bych zjistit, jestli se v proměnné nachází float.
Jde ale o to, že ta proměnná se tahá z asociativního pole, kde je něco string a něco float, jen se to do toho pole ukládá ze souboru (který se generuje podle dat v $_GET, která posílá RPi), takže tam jsou všechny uloženy jako string (nebo aspoň mám ten dojem, protože is_float ani is_numeric nevracejí True, když jim ty hodnoty podstrkávám )

foreach($hodnoty as $klic => $hodnota)
{
....
    if($hodnota == "on" )
                echo '<span class="lowtemp">'.$hodnota."</span>";

    else if($hodnota == "off")
                echo '<span class="hightemp">'.$hodnota."</span>";

    else if(is_float($hodnota))
            {
                echo '<span class="'. priradCssDleTeploty($hodnota) . '">'.$hodnota."</span>";
                //tohle se nikdy nevykoná
            }

zkoušel jsem, že před každým zpracováním hodnoty se nejdřív protáhne funkcí, která by string nechala stringem, ale float by vrátila jako float, jenže dostanu 0, pokud je v proměnné prostý text, případě časových údajů (01:52:05), dostanu první číslici (1) a pokud tam je ten float, tak dostanu číslo, ale asi ne float, protože ten else if se vykoná jen u těch 0 ze stringů

function prevedDatovyTyp($promenna)
   {
       if($promenna == floatval($promenna))
           return floatval ($promenna);
       else
           return $promenna;

   }

to pole vypadá nějak takto:

print_r($hodnoty);
Array ( [cas] => 2014-1-12 01:52:05 [cputemp] => 34.2 [pin8] => on ...

(ve finále se dozvídám že vyšší teplota procesoru je nepodstatná, ale měl bych se věnovat zmrzlému pinu 8 :D )
Nevíte někdo, jak to rozchodit?
Děkuji.

Editováno 1.12.2014 2:09
Odpovědět 1.12.2014 2:07
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Odpovídá na Adam Ježek
Michal Žůrek (misaz):

a proč ti RPi posílá takové smíšeniny? Přece když pošleš request s parametrem, tak to máš pěkně roztříděné.

Nahoru Odpovědět 1.12.2014 6:59
Nesnáším {}, proto se jim vyhýbám.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
Adam Ježek:

Posila to, protoze takove reseni bylo s takovym mnozstvim dat nejjednodussi. Vsechno se pak uklada do souboru, a na webu je nekolik stranek, ktery si to zpracovavaj podle sebe. Jen ted je ten problem, ze prijdu o typ promenne.

Nahoru Odpovědět 1.12.2014 7:34
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Tukmak
Člen
Avatar
 
Nahoru Odpovědět 1.12.2014 12:01
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Tukmak
Adam Ježek:

Jak už sem psal, if_float to nevezme, protože ho nezajímá uložená hodnota, ale typ proměnné, která je v tomto případě string.

Nahoru Odpovědět 1.12.2014 12:53
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Tukmak
Člen
Avatar
Odpovídá na Adam Ježek
Tukmak:

Tak to pardon, překouk sem se. Každopádně to co hledáš je funkce is_numeric().

Funkce pak může vypadat takto:

function convertFloat($input) {
        if (is_numeric($input)) {
                return (float) $input;
        }

        return $input;
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 1.12.2014 13:09
Avatar
Odpovídá na Adam Ježek
Michal Žůrek (misaz):

nejjednodušší sice ano, ale zároveň asi nejhorší možné. V databázové tabulce by měli být data stejného typu, ne že na jednom řádku je float, na druhém string, ....

Nahoru Odpovědět 1.12.2014 13:19
Nesnáším {}, proto se jim vyhýbám.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
Adam Ježek:

kdo tu mluví o databázové tabulce? jedná se o soubor plný hodnot z všemožných čidel a nevím, proč bych to měl dávat do databáze a rozhodně to nechci dělit na číselné a textové hodnoty

Nahoru Odpovědět 1.12.2014 14:24
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Fredep
Redaktor
Avatar
Fredep:

Ahoj, jen mě napadlo, nešlo by to udělat takto?

if ((float)$input == $input) // Je to float
Nahoru Odpovědět 1.12.2014 16:19
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na Fredep
Tonda Kozák:

Nešlo. Tahle podmínka bude vždycky splněna, protože pokud porovnáváš různé datové typy, tak se to automaticky přetypuje.

Pokud ale by to číslo bylo vždy různé od nuly, šlo by to takhle:

if ((float)$input != 0) // je to číslo

Ale funkce is_numeric() funguje stejně.

Editováno 1.12.2014 17:17
 
Nahoru Odpovědět  +1 1.12.2014 17:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.