Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc z pętą
Forum PHP.pl > Forum > PHP
raven666
Cześć wam,
Ma ktoś pomysł jak przelecieć przez tablice by była w tym formacie ? Każda kategoria ma rodzica wyżej i nieograniczoną liczę dzieci i dzieci tak samo.
Jedynie co potrzebuje by kluczem było id ostaniej kategorii. Prawie mi się udało zrobić, jednak pierwszy parent mi znika w niektórych kategoriach :/ dzieki za pomoc

Format jaki potrzebuje:
  1. '1' => array(
  2. '1' => 'Pozdespoły'
  3. ),
  4. '2' => array(
  5. '1' => 'Pozdespoły'
  6. '2' => 'CPU'
  7. ),
  8. '3' => array(
  9. '1' => 'Pozdespoły'
  10. '2' => 'CPU',
  11. '3' => 'Intel'
  12. ),
  13. '5' => array(
  14. '1' => 'Pozdespoły'
  15. '2' => 'CPU',
  16. '3' => 'Intel',
  17. '5' => 'i5'
  18. ),
  19. '6' => array(
  20. '1' => 'Pozdespoły'
  21. '2' => 'CPU',
  22. '3' => 'Intel',
  23. '6' => 'i7'
  24. ),
  25. '4' => array(
  26. '1' => 'Pozdespoły'
  27. '2' => 'CPU',
  28. '4' => 'AMD'
  29. )
  30. );


Format jaki mam:
  1. $categories = array(
  2. '0' => array(
  3. 'Category' => array(
  4. 'id' => 2,
  5. 'name' => 'CPU'
  6. 'parent_id' => 1
  7. ),
  8. 'ParentCategory' => array(
  9. 'id' => 1,
  10. 'name' => 'Podzespoły',
  11. 'parent_id' => null
  12. ),
  13. 'children' => array(
  14. '0' => array(
  15. 'Category' => array(
  16. 'id' => 3,
  17. 'name' => 'Intel',
  18. 'parent_id' => 2
  19. ),
  20. 'ParentCategory' => array(
  21. 'id' => 2,
  22. 'name' => 'CPU',
  23. 'parent_id' => 1
  24. ),
  25. 'children' => array(
  26. '0' => array(
  27. 'Category' => array(
  28. 'id' => 5,
  29. 'name' => 'i5',
  30. 'parent_id' => 3
  31. ),
  32. 'ParentCategory' => array(
  33. 'id' => 3,
  34. 'name' => 'Intel',
  35. 'parent_id' => 2
  36. ),
  37. 'children' => array(
  38. '0' => ....,
  39. '1' => ...
  40. )
  41. ),
  42. '1' => array(
  43. '0' => array(
  44. 'Category' => array(
  45. 'id' => 6,
  46. 'name' => 'i7',
  47. 'parent_id' => 3
  48. ),
  49. 'ParentCategory' => array(
  50. 'id' => 3,
  51. 'name' => 'Intel',
  52. 'parent_id' => 2
  53. ),
  54. 'children' => array(
  55. '0' => ....,
  56. '1' => ....
  57. )
  58. )
  59. )
  60. ),
  61. '1' => array(
  62. 'Category' => array(
  63. 'id' => 4,
  64. 'name' => 'AMD',
  65. 'parent_id' => 2
  66. ),
  67. 'ParentCategory' => array(
  68. 'id' => 2,
  69. 'name' => 'CPU',
  70. 'parent_id' => 1
  71. ),
  72. 'children' => array(
  73. '0' => .....,
  74. '1' => ....
  75. )
  76. )
  77. )
  78. ),
  79. '1' .....
  80. );
kapslokk
Wrzuć co zrobiłeś, pozatym wg mnie sama pętla nie wystarczy, przydała by się rekurencja.
raven666
Cytat(kapslokk @ 16.07.2015, 20:11:41 ) *
Wrzuć co zrobiłeś, pozatym wg mnie sama pętla nie wystarczy, przydała by się rekurencja.


Coś w ten sposób, niemam teraz akurat tego kodu:
  1. public function categories($categories, $parents = array(), $result = array()) {
  2. if (!empty($categories['children'])) {
  3. foreach ($categories['children'] as $children) {
  4. $mainCategory = $categories['Category']['name'];
  5. $parentCategory = $children['ParentCategory']['name'];
  6. $category = $children['Category']['name'];
  7.  
  8. $parents[$children['ParentCategory']['id']] = $mainCategory ;
  9. $parents[$children['ParentCategory']['id']] = $parentCategory;
  10. $parents[$children['Category']['id']] = $category;
  11.  
  12. $result[$children['Category']['id']] = $parents;
  13.  
  14. $result = $this->categories($children, $parents, $result);
  15. unset($parents);
  16. }
  17. }
  18. return $result;
  19. }
Randallmaster
Nie lubię gotowców, ale nie wiedziałbym jak dokładnie ci to wytłumaczyć więc 3maj:

  1. function nameExist($array, $firstKey, $callback, $firstForeach){
  2. foreach($array as $key => $r){
  3. if($firstForeach == 1) $firstKey = $key;
  4. if(is_array($r)){
  5. $callback = nameExist($r, $firstKey, $callback, 0);
  6. } else {
  7. if($key == 'name') $callback[$firstKey][] = $r;
  8. }
  9. }
  10. return $callback;
  11. }
  12. $callback = array();
  13. $test = nameExist($categories, 0, $callback, 1);
  14. print_r($test);
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.