Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zmiany zagnieżdzonej tablicy - rekursywna, Zmiana/stworzenie nowej tablicy z nową strukturą
haryb
post
Post #1





Grupa: Zarejestrowani
Postów: 137
Pomógł: 0
Dołączył: 9.11.2004
Skąd: Gdańsk

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


Mam z pozoru proste zadanie do zrobienia ale po kilku podejściach w różny sposób za kazdym razem dochodze do momentu że coś nie gra. Dlatego zdecydowałem się że tutaj przedstawie swój problem i może na forum znajdzie się sposób którego nie widze. Kombinowałem z recurencją, z iteratorami ale nie mogę tego osiągnąć co potrzebuje.

Zadanie polega na zbudowaniu nowej tablicy (lub modyfikacji wzorcowej) na podstawie wzorcowej plus dodając pewne nowe elementy.
Tablica wejściowa może mieć dużo więcej zagniezdzeń oraz większą ilość elementów.

Tablica wejściowa:
  1. public $tmp_tab = [
  2. 100001 => [
  3. 104089 => [
  4. 101963 => [
  5. 111119,
  6. 101816,
  7. ],
  8. ],
  9. ],
  10. ];


A wyjściowo powinna tak wyglądać:
  1. public $tmp_tab2 = [
  2. 100001 => [
  3. 'id' => 100001,
  4. 'children' => [
  5. 104089 => [
  6. 'id' => 104089,
  7. 'children' => [
  8. 101963 => [
  9. 'id' => 101963,
  10. 'children' => [
  11. 111119 => [
  12. 'id' => 111119
  13. ],
  14. 101816 => [
  15. 'id' => 101816,
  16. ],
  17. ],
  18. ],
  19. ],
  20. ],
  21. ],
  22. ],
  23. ];



Ten post edytował haryb 17.12.2015, 18:17:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
haryb
post
Post #2





Grupa: Zarejestrowani
Postów: 137
Pomógł: 0
Dołączył: 9.11.2004
Skąd: Gdańsk

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


Kombinuje cos takiego.

Zrobiłem metode pomocniczą wyciągająca bezpośrednie dzieci:
  1. function pobierz_bezposrednie_podkategorie($array, $keySearch)
  2. {
  3. if (isset($array[$keySearch])) {
  4. $childrenKeys = [];
  5. foreach ($array[$keySearch] as $idCategory => $child) {
  6. $childrenKeys[] = is_array($child) ? $idCategory : $child;
  7. }
  8. return $childrenKeys;
  9. }
  10. foreach ($array as $key => $item) {
  11. if ($key == $keySearch) {
  12. return array_keys($item);
  13. } else {
  14. if (is_array($item)) {
  15. return $this->pobierz_bezposrednie_podkategorie($item, $keySearch);
  16. }
  17. return [];
  18. }
  19. }
  20. }


I metodę która rekurencyjnie przelatuje po wejściowej tabeli i na podstawie jej tworzy nową.
  1. private function getCategory2($id_kategoria)
  2. {
  3. $this->tab_result_ver2[$id_kategoria]["id"] = $id_kategoria;
  4. foreach ($this->pobierz_bezposrednie_podkategorie($this->tmp_tab, $id_kategoria) as $id_kategoria_dziecka) {
  5. $this->tab_result_ver2[$id_kategoria]["children"][$id_kategoria_dziecka]["id"] = $id_kategoria_dziecka;
  6. $this->getCategory2($id_kategoria_dziecka);
  7. }
  8. }
  9.  
  10. $this->getCategory2(100001);
  11. debug($this->tab_result_ver2);
  12.  


Niestety tutaj mam problem z poprawnym przypisaniem podtablic do odpowiednich kluczy.
Ponieważ w kazdej iteracji mam info jakie powinno byc teraz id plus id rodzica, ale jak jest wiele zadniezdzeń to potrzeba informacji o całej ścieżce kluczy pod jakimi trzeba zapisać nową tablice.
Czy przekombinowuje ?
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 21:35