Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][PHP]zmiana tablicy
phpowiec84
post
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


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' ;
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


  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. }


Ten post edytował mortus 20.06.2011, 18:58:08
Go to the top of the page
+Quote Post
phpowiec84
post
Post #3





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 10.12.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował phpowiec84 20.06.2011, 20:12:13
Go to the top of the page
+Quote Post
mortus
post
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mortus 20.06.2011, 21:38:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 12:45