Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przerobienie tablicy wielowymiarowej na płaską
Forum PHP.pl > Forum > Przedszkole
zaksmok
Witam. Mam wielowymiatową tablicę w PHP. Chciałbym ją przerobić na płaską tablicę na zasadzie:

$tablica[text][0][level]='zzz' na $new['tablica[text][0][level]'] ='zzz'

Czy idzie jakoś łatwo wyciągnąć całą ścieżkę czy trzeba korzystać z rekurencji?
ixpack
Używasz mądrych wyrazów ;=

Ale po chłopsku - jeżeli znasz text i level to zrób pętlę i tak

$tablica['text'][$n]['level'] = $new['text'.$n.'level']

A jak nie znasz text i level, lub jest to zmienna to zrób sobie tablicę nazw ('text', 'level') i kombinuj w tę stronę wink.gif pomocne mogą być jeszcze array_walk
zaksmok
Problem polega na tym, że potrzebuję to do obsługi formularzy. Czyli nie znam wejścia kompletnie - to może być 2-wymiarowa tablica, a może być 10-wymiarowa. Czyli pozostaje array_map w recursive. Array_walk_recursive wypluła tylko wartość i ostatni klucz, poprzednich nie znam.
PanGuzol
foreach
ixpack
Nie do końca chyba rozumiem... Ale formularzy mówisz?

A co jeżeli utworzyłbyś obiekty tych formularzy? Np.:

  1. $form_fields = array('prefix_pole_a', 'prefix_pole_b', 'prefix_pole_c');
  2. foreach ($form_fields as $field) {
  3. $field_b = substr($field, 7,50); //bo prefix + _ prefixy odnosza sie do nazw formularzy
  4. $form['prefix']->$field_b = $_POST[$field];
  5. }



zaksmok
To rozwiązanie też nie pomoże w żaden sposób, bo formularz może składać się z dynamicznie dodawanych subformularzy - np pola:
form[client][0][name]
form[client][0][email]
form[client][1][name]
form[client][1][email]

Więc nie dam rady wyciągnąć wszystkich pól.
PanGuzol
Widzę, ze moją odpowiedź to zignorowałeś chyba...to Ci napiszę co miałem na myśli.
Rozumiem, że tablica zawsze ma 3 wymiary więc:
  1. $new = array();
  2. foreach($tablica as $text => $wartosc)
  3. {
  4. foreach($wartosc as $n => $wartosc2)
  5. {
  6. foreach($wartośc2 as $level => $wartosc3)
  7. {
  8. $key = $text.$n.$level;
  9. $new[$key] = $wartosc3;
  10. }
  11. }
  12. }
zaksmok
Nie - tablica może mieć 1 level, a może mieć 10 leveli - zależy jak się formularz zbuduje. Myślałem, że jest jakieś narzędzie, które wyciągnie po kolei wszystkie klucze danego elementu. No nic pozostaje tylko rekurencja :/
PanGuzol
No to tak jak piszesz rekurencja, możesz wykorzystać konstrukcję którą napisałem wcześniej, a do sprawdzania warunku przerywajacego skorzystać z funkcji is_array
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.