Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] "Normalizacja" tablic
Forum PHP.pl > Forum > PHP
markuz
Witam,

Mam kilkaset tablic. Ich struktura jest taka, że na samym dole (liście) zawsze znajduje się tablica z 2 elementami.
Problem dotyczy wyższych elementów które są zmienne np.

$ - oznacza liść (tablica 2 element-owa o wartościach float)

A = ($, $, $, $)

B = (($, $, $), ($, $))

C = (($, $), (($, $, $), ($, $, $)))

Teraz chciałbym je "znormalizować" do postaci gdzie:
A = (($, $, $, $)) [istniał tylko 1 element więc wrzucamy go do nowej tablicy jako pierwszy]
B = (($, $, $), ($, $)) [takie samo - nie ruszamy są dobrze ułożone]
C = (($, $), ($, $, $), ($, $, $)) [tutaj 2 element tablicy posiadał kolejne elementy w sobie, teraz wszystko jest "spłaszczone"]

Istnieje jakiś szybki sposób dzięki któremu osiągnę ten efekt? Zagnieżdżeń może być więcej.

Być może rozwiązanie jest proste tylko mózg mi się przegrzewa nerdsmiley.png smile.gif
freewalker
może i rozwiązanie jest proste, ale sposób w jaki to wytłumaczyłeś chyba nie... bo nie czaję o co tak na prawdę biega?smile.gif

Jeśli A to: $zmienna=array(1,2,3,4);
To chcesz zrobić z tego: $nowa_zmienna=array($zmienna); questionmark.gifquestionmark.gif
Pyton_000
Nie
A = array(array(1,2),array(1,2),array(1,2));

Każdy $ == array(float,float)
freewalker
Cytat(Pyton_000 @ 17.02.2015, 18:43:32 ) *
Nie
A = array(array(1,2),array(1,2),array(1,2));

Każdy $ == array(float,float)



ok a co dalej, w sensie co chcesz z tym floatem zrobic?? chcesz z A utworzyć: $zmienna=array(1,2,1,2,1,2); gdzie 1,2 to wyodrębnione wartości z array(float,float)? Zaraz sam się pogubię w tym co piszę ; )
markuz
IN:

  1. array(5.2, 5.2),
  2. array(5.2, 5.2)
  3. ),
  4. array(5.2, 5.2),
  5. array(5.2, 5.2)
  6. ),
  7. array(5.2, 5.2),
  8. array(5.2, 5.2)
  9. )
  10. )
  11. );


OUT:

  1. array(5.2, 5.2),
  2. array(5.2, 5.2)
  3. ),
  4. array(5.2, 5.2),
  5. array(5.2, 5.2)
  6. ),
  7. array(5.2, 5.2),
  8. array(5.2, 5.2)
  9. ),
  10. );


To tylko 1 przypadek. Głównie chodzi o wyłapanie grupy "liści" (array(5.2, 5.2), array(5.2, 5.2)) i wrzucenie tych nowych grup do tablicy. Z tym, że czasami mogą występować przypadki gdzie np.

  1. array(5.2, 5.2),
  2. array(5.2, 5.2)
  3. )
  4. )
  5. )


itp.

Grupa liści może się składać zarówno z 2 jak i z 9999 elementów (n).
freewalker
hmm czyli w skrócie para floatów zbyt głęboko zagnieżdzona powinna zostać przepisana do poziomu zagnieżdżenia 1 jeśli dobrze rozumiem, a im bardziej łapię już o co chodzi tym bardziej widzę jak przytłaczający to może być problem. Przy operacjach na tak dużych tablicach (praktycznie niemal nieskończenie głębokich wynika z postu) może wyskoczyć problem z przetworzeniem tego... a w jaki sposób te tablice się generują? Może da się ten problem rozwiązać od zarodka, zanim skrypt zacznie zagnieżdżać tak głęboko?
markuz
Nieskończona jest tylko ilość liści w 1 grupie - i nie jest nieskończona max. około 15-20k. Zagnieżdżenie maksymalne to 5. Od zarodka nic nie ruszę bo nie mam na to wpływu.
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.