Diskuze: txt soubor na asociativní pole

PHP PHP txt soubor na asociativní pole American English version English version

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

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
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
Martin Konečný (pavelco1998):

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
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Adam Ježek:

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
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Vojta Staněk:

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.