Mam taką zagwozdkę mam tablicę wielokrotnie zagnieżdżona:

  1. public $dane = array(
  2. 111 => array(
  3. 222 => array(
  4. 333,
  5. 444 => array(
  6. 555
  7. ),
  8. ),
  9. 666,
  10. 777,
  11. 888 => array(
  12. 999,
  13. 1000,
  14. )
  15. )
  16. );


I potrzebuje tablicy która będzie zawierała jakby ścieżki dojścia do ostatniego elementu w danej gałęzi czy np:
  1. array(111,222,333),
  2. array(111,222,444,555),
  3. array(111,666),
  4. array(111,777),
  5. array(111,888,999),
  6. array(111,888,1000),
  7. );


Zacząłem kombinować w ten sposób:

  1. public function traceArray($input = array()){
  2. $iteration = new \RecursiveArrayIterator($input);
  3. $count = count($iteration);
  4. $i = 0;
  5. foreach($iteration as $key => $item) {
  6. if (is_array($item)) {
  7. $this->tmp[] = $key;
  8. $this->traceArray($item);
  9. } else {
  10. $i++;
  11. $this->tablica_wyjsciowa[] = array_merge($this->tmp, array($item));
  12. if ($i == $count) {
  13. $this->tmp = array();
  14. }
  15. }
  16. }
  17. }
  18.  
  19. $this->traceArray($tablica_wejsciowa);
  20. var_dump($this->tablica_wyjsciowa);
  21.  


Niestety nie do końca śmiga tak jakbym chciał, na początku dobrze buduje tablice ścieżek, ale w momencie kiedy zresetuje tablice tmp to kolejne tablice ścieżki nie zawierają wszystkich elementów jeśli nie będę tego resetował to kolejne tablice ścieżek będą dodawać się niepoprawnie.

Jakiś pomysł co można by poprawić w kodzie by generowało taką tablicę ?