Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][PHP]zmiana tablicy
Forum PHP.pl > Forum > Przedszkole
phpowiec84
witam
mam tablicę która wygląda tak :
  1. $tablica = array
  2. (
  3. 'poziom_1.poziom_2.poziom_3' => 'jakas wartosc' ,
  4. 'level_1.level_2.level_3.level_4' => 'kolejna wartosc'
  5. );


  1.  
  2. foreach($lang as $row)
  3. {
  4. $tablica = explode('.', $row );
  5. }
  6.  
  7. chcę by tablica po konwersji wygladała tak :
  8. ale zmarnym skutkiem mi to wychodzi , w jaki sposób moge to wykonać ,używając funkcji list oraz explode ?

  1.  
  2.  
  3. $wynik['poziom_1']['poziom_2']['poziom_3'] = 'jakas wartosc' ;
  4. $wynik['level_1']['level_2']['level_3']['level_4'] = 'kolejna wartosc' ;
mortus
  1. foreach($tablica as $klucz => $wartosc) {
  2. $noweKlucze = explode('.', $klucz);
  3. $wynik[$noweKlucze[0]][$noweKlucze[1]][$noweKlucze[2]] = $wartosc;
  4. }

list() raczej się tutaj nie przyda.

EDIT
Choć można funkcją list() zastąpić zmienną $noweKlucze:
  1. foreach($tablica as $klucz => $wartosc) {
  2. list($klucz1, $klucz2, $klucz3) = explode('.', $klucz);
  3. $wynik[$klucz1][$klucz2][$klucz3] = $wartosc;
  4. }
phpowiec84
dzieki ,tak właśnie kompinuje ,ale chodzi o to że mam zmienną ilość $noweKlucze jak to opisałeś w przykładzie wyżej :/ ,dlatego potrzebuje dostosować tak a nie inaczej :/

Alę to dalej w niczym nie prowadzi ,skoro tablica ma różną ilość kluczy
mortus
No tak, trochę za późno się zorientowałem. Rozwiązaniem jest rekurencja:
  1. function make_an_array($listOfKeys, $value) {
  2. if(is_array($listOfKeys) && count($listOfKeys) == 1) {
  3. return array($listOfKeys[0] => $value);
  4. }
  5. $currentKey = array_shift($listOfKeys);
  6. return array($currentKey => make_an_array($listOfKeys, $value));
  7. }
  8.  
  9. foreach($tablica as $klucz => $wartosc) {
  10. $noweKlucze = explode('.', $klucz);
  11. $pierwszyKlucz = array_shift($noweKlucze);
  12. $wyniki[$pierwszyKlucz] = make_an_array($noweKlucze, $wartosc);
  13. }
  14.  
  15. echo '<pre>';
  16. print_r($wyniki);

Oczywiście parametr funkcji make_an_array() musi być niepustą tablicą.

EDIT
Niestety sam musisz rozszerzyć funkcjonalność skryptu, bo w poprzednim kodzie coś mi się "uwaliło", a już mi się nie chce sprawdzać co.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.