Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: php je ve stringu float?

Aktivity
Avatar
Adam Ježek
Tvůrce
Avatar
Adam Ježek:1.12.2014 2:07

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
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Adam Ježek
Michal Žůrek - misaz:1.12.2014 6:59

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
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Adam Ježek:1.12.2014 7:34

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
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Tukmak
Člen
Avatar
Odpovídá na Adam Ježek
Tukmak:1.12.2014 12:01

Ahoj, zkus http://php.net/…is-float.php

Editováno 1.12.2014 12:01
 
Nahoru Odpovědět
1.12.2014 12:01
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Tukmak
Adam Ježek:1.12.2014 12:53

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
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Tukmak
Člen
Avatar
Odpovídá na Adam Ježek
Tukmak:1.12.2014 13:09

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
1.12.2014 13:09
Avatar
Odpovídá na Adam Ježek
Michal Žůrek - misaz:1.12.2014 13:19

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
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Adam Ježek:1.12.2014 14:24

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
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Neaktivní uživatel:1.12.2014 16:19

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
Neaktivní uživatelský účet
Avatar
Tonda Kozák
Člen
Avatar
Odpovídá na Neaktivní uživatel
Tonda Kozák:1.12.2014 17:15

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.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.