PHP - Ako vytvoriť pole s reťazcovým kľúčom

Programovacie jazyky, rady, poradňa...
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa weroro »

Ahoj,

nejak sa mi nedarí nasledovné.
Mám TXT súbor, v ktorom mám taký obsah:

Kód: Vybrať všetko

premenna1=hodnota1
premenna2=hodnota2
premenna3=hodnota3
premenna4=hodnota4
Akým spôsobom dosiahnem to aby som mal potom v PHP pole, ktorého položky vypíšem nasledovne?

Kód: Vybrať všetko

echo $pole['premenna1']; // vypíše hodnota1 
Ďakujem za odpovede.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa BX »

Úplne normálne si vyparsuješ súbor a zaindexuješ to reťazcom. Tak ako by si plnil pole s int i: $pole[$i], tak budeš plniť aj pole s reťazcami. php si s tým poradí.

Možno to pole ešte na začiatku zadefinovať ako $pole = array();, ale neviem, či to bude nutné.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa audiotrack »

a v praxi asi takto:

Kód: Vybrať všetko

$file = fopen("subor.txt","r");
while (!feof($file)) {
   list($key,$value) = explode("=",fgets($file));
   $pole[trim($key)] = trim($value);
}
fclose($file);
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa weroro »

Ja som to urobil takto:

Kód: Vybrať všetko

$subor = file_get_contents('subor.txt');
$riadky = explode("\r\n", $subor);
for ($i = 0; $i < count($riadky); $i++)
{
    $tmp = explode('=', $riadky[$i]);
    $pole[$tmp[0]] = $tmp[1];
}
Používam síce viac polí, ale účel to plní.

Ďakujem všetkým.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa audiotrack »

ale no :)
aspoň to sprav univerzálne, a nespoliehaj sa na unix. IIS je stále dosť používaný

Kód: Vybrať všetko

$riadky = explode(PHP_EOL, $subor);
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa pcsiete »

Jakživ som mal pocit že \r\n je ukončovanie riadku typické pre windowsy.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa audiotrack »

aj majster tesár sa utne :)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa pcsiete »

:)
Inač obecne by som ani neodporúčal používať explode na riadky. Pri niektorých vstupoch to môže mať blbé následky (nejaké premiešanie) a hlavne ak by si chcel svoj formát vylepšiť, musel by si to prerábať.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa BX »

Nie je rozumnejšie a aj úspornejšie nechať toto na funkciu file?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa audiotrack »

BX napísal:Nie je rozumnejšie a aj úspornejšie nechať toto na funkciu file?
o efektivite tu vôbec nie je reč :) V praxi by som nepoužil ani to svoje riešenie ktoré som napísal. Ja som len reagoval na to tvoje "parsovanie" ako by vyzeralo zapísané v PHP. To, že nič netreba parsovať a že si mu zle poradil, je už druhá vec
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa BX »

Akože zle, napísal som slovami presne to, čo si ty potom napísal kódom. Slovo "vyparsovať" som použil ako "vybrať to, čo potrebuješ" (aj keď zo syntaktickej analýzy mi to slovo tiež k tomuto nejde, ale zvykne sa to takto používať)

S tým file() mi ide ale skôr o to, že keď už, tak nemusím používať file_get_contents a explode, ale použijem jedinú funkciu a mám hneď to, čo potrebujem. A nemusím (či?) pritom riešit oddelovač riadkov. Pýtam sa, lebo túto funkciu som na toto snáď nikde nevidel použitú (či v diskusiách, návodoch atď), tak chcem vedieť, čo je na nej zlé, alebo ako to s ňou je.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - Ako vytvoriť pole s reťazcovým kľúčom

Príspevok od používateľa audiotrack »

BX napísal:Úplne normálne si vyparsuješ súbor a zaindexuješ to reťazcom. Tak ako by si plnil pole s int i: $pole[$i], tak budeš plniť aj pole s reťazcami. php si s tým poradí.

Možno to pole ešte na začiatku zadefinovať ako $pole = array();, ale neviem, či to bude nutné.
to zvýraznené je zlá rada, pretože jemu úplne stačí jediný riadok:

Kód: Vybrať všetko

$pole = parse_ini_file("subor.txt");
a vravím že ja by som také riešenie ako som napísal nepoužil, len som prepísal čo si ty napísal :)

k tomu file() - táto funkcia ti zoberie aj "enter" na konci, kým fgets ho vynechá. Ale ak použiješ trim() (alebo aspoň rtrim()) tak jasné že sa dá aj cez file()
Napísať odpoveď