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: txt soubor na asociativní pole

Aktivity
Avatar
Adam Ježek
Tvůrce
Avatar
Adam Ježek:31.10.2014 13:34

Zdravim,
mám textový soubor, ve kterém jsou uložena data z různých čidel ve stylu:

mistnost:1
telota:22.5
okno1:zavreno

atd. Jednou za čas se obnoví, php ho načte... a pak mám problém v následujícim: Potřebuji, aby se to převedlo na asociativní pole a dle hodnoty u mistnost se šouplo do proměnné, výstup ve stylu

$hodnotmistnost1j = array(
        'teplota'  => 22.5,
        'okno1'  => 'zavreno',
    );

Pak si to už zpracuju, ale mám problém s tím převodem. Nevíte jak na to?
Díky.

Odpovědět
31.10.2014 13:34
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Odpovídá na Adam Ježek
Martin Konečný (pavelco1998):31.10.2014 14:44

Ahoj,

pokud chápu správně, pak z toho souboru získáš třeba takový string

$s = "
mistnost:1
teplota:22.5
okno1:zavreno
mistnost:2
teplota:23
okno1:zavreno
mistnost:3
teplota:18
okno1:otevreno
";

Pokud jo, tak by mohlo fungovat něco takovýho (i když je to shit):

$lines = explode("\n", $s);

foreach ($lines as $row) {
        $row = trim($row);

        if (empty($row)) {
                continue;
        }

        $values = explode(":", $row);
        $key = $values[0];
        $value = $values[1];

        if ($key === "mistnost") {
                $varName = "hodnotmistnost{$value}j";
                $$varName = array();
        } else {
                $x = &$$varName;
                $x[$key] = $value;
        }
}


echo "<pre>";
var_dump($hodnotmistnost1j, $hodnotmistnost2j, $hodnotmistnost3j);
Editováno 31.10.2014 14:46
Nahoru Odpovědět
31.10.2014 14:44
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Adam Ježek:31.10.2014 14:50

Každá místnost má vlastní soubor(a dokonce i složku), ta položka room tam teoreticky ani bejt nemusí, ani nevim proč sem jí tam dal. Každopádně zatim dík, kouknu se na to pak, teď mam co dělat abych stihnul sraz :D

Nahoru Odpovědět
31.10.2014 14:50
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Vojta Staněk:31.10.2014 15:18

Jestli máš data ve více souborech můžeš je procházet nějak takhle: http://stackoverflow.com/…2257/2215742

Podle mne by bylo lepší použít něco jako:

$filename = "data.txt";
$handler = fopen($filename, 'r');
while(!feof($handler) {
    list($key, $value) = explode(':', fgets($handler));
    $allData[$room][$key] = $value;
}
fclose($handler);

Vytvářet jména proměných dynamicky mi přide jako blbost (a prasárna). Proto bych si udělal něco jako obalující pole ($allData).

Dokumentace:
fgets - načte řádek ze souboru - http://php.net/…on.fgets.php
feof - testuje konec souboru
explde - http://cz2.php.net/….explode.php
list - http://cz2.php.net/…ion.list.php

Editováno 31.10.2014 15:18
 
Nahoru Odpovědět
31.10.2014 15:18
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 4 zpráv z 4.