[php] Tablica asocjacyjna z pliku

0

Cześć.
Czy jest jakiś prosty sposób aby plik tekstowy w postaci:

klucz1|wartosc1
klucz2|wartosc2
klucz3|wartosc3
...

wczytać jako tablicę:

array
 (
 klucz1 => wartosc1,
 klucz2 => wartosc2,
 klucz3 => wartosc3
 )

Potrafię to zrobić "na około" za pomocą dwoch funkcji

file()

oraz array_combine()

 ale może jest do tego jakaś specjalna funkcja?
Z góry dzięki za pomoc.
0

mógłbyś przedstawić swój sposób ? bo z tego co zrozumiałem to i tak używasz foreach, do tego explode, rozdzielasz na dwie tablice a potem robisz array_combine ?

wątpie żeby była funkcja która może to bardziej uprościć, ale myślę że najszybciej będzie tak jak teraz file:

$output = Array();
foreach(file('plik.txt') as $w){
  $w = explode('|', $w); // lub rtrim($w) w zależności czy dopuszczasz \n na końcu
  $output[$w[0]] = $w[1];
}

można by na upartego zrobić tylko przez preg_match + file_get_contents + array_combine ale to na pewno nie będzie szybsze (chociaż kto wie, tam się tworzy pełno mini tablic + funkcja file podobno jest nieporównywalnie wolniejsza):

$output = preg_match_all('/(.*)\|(.*)/', @file_get_contents('plik.txt'), $w) ?
  array_combine($w[1], $w[2]) : Array();

jeśli masz wpływ na format tego pliku to lepiej jego dostosuj
tak czy inaczej musisz jakoś plik wczytać ... poniżej 2 linijek raczej nie zejdziesz, a radzę zostać przy 4
ale czy to naprawdę aż takie ważne ?

0

Ja wykombinowałem to tak:

//odczyt pliku ustawienia.txt
$tablica=file("ustawienia.txt");
$rozmiar=sizeof($tablica);
for ($i=0; $i<$rozmiar; $i++)
 {
 $klucze[]=substr($tablica[$i],0,strpos($tablica[$i],"|"));
 $wartosci[]=substr($tablica[$i],strpos($tablica[$i],"|")+1,300);
 }
$ustawienia=array_combine($klucze,$wartosci);
//ustawienia wpisane do tablicy asocjacyjnej

Niby jest tego "aż" 8 linijek ale i tak jestem z siebie dumny że sam to wymyśliłem :-)
No ale dziekuję też za pomoc.

0

rzeczywiście bardziej naokoło się chyba nie da ;). jeżeli chodzisz po tablicach, to wygodniej używać foreach, a ogólnie zabawa z array_combine jest (jak to ktoś określił na elektrodzie jeden mój pomysł ;)) overengineered - przekombinowana

1 użytkowników online, w tym zalogowanych: 0, gości: 1