Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: php je ve stringu float?

PHP PHP php je ve stringu float? American English version English version

Aktivity (1)
Avatar
Adam Ježek
Tým ITnetwork
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
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):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
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: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
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: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
Tým ITnetwork
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
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: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í
+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):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
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: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
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: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
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: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 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.