Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dzielenie tablic?
Forum PHP.pl > Forum > Przedszkole
L0k0
Witam!

Mam taka sytuację:

mam dwie tabele 1:m (kupony i zdarzenia)

Efektem selekta
  1. DB::SELECT('*')->from('kupon')
  2. ->join('zdarzenia', 'left')
  3. ->on('kupon.id', '=', 'zdarzenia.id_kuponu')
  4. ->execute()->as_array();


jest:

  1. array(2) (
  2. 0 => array(13) (
  3. "id" => string(1) "1"
  4. "data_godzina" => string(16) "2014-02-25 13:49"
  5. "bukmacher" => string(6) "Bet365"
  6. "rozliczenie" => string(1) "0"
  7. "stawka" => string(3) "100"
  8. "ako" => string(1) "3"
  9. "nazwa" => string(20) "Arsenal - Manchester"
  10. "typ" => string(9) "under 2.5"
  11. "kurs" => string(1) "2"
  12. "dyscyplina" => string(1) "2"
  13. "data_zdarzenia" => string(16) "2014-02-28 13:45"
  14. "analiza" => string(29) "Warto postawić na gospodarzy"
  15. "id_kuponu" => string(1) "1"
  16. )
  17. 1 => array(13) (
  18. "id" => string(1) "2"
  19. "data_godzina" => string(16) "2014-02-25 13:49"
  20. "bukmacher" => string(6) "Bet365"
  21. "rozliczenie" => string(1) "0"
  22. "stawka" => string(3) "100"
  23. "ako" => string(1) "3"
  24. "nazwa" => string(17) "Bayern - Freiburg"
  25. "typ" => string(1) "1"
  26. "kurs" => string(1) "1"
  27. "dyscyplina" => string(1) "2"
  28. "data_zdarzenia" => string(16) "2014-02-28 15:30"
  29. "analiza" => string(37) "Warto postawić na Bayern, bo ciśnie"
  30. "id_kuponu" => string(1) "1"
  31. )
  32. )


Problem polega na tym, że dane odnośnie kuponu chcę wykorzystać w jednym miejscu, natomiast same zdarzenia - w innym. Zwracane tablice zawierają jednak połączenie kuponu i jednego ze zdarzeń.

Ma ktoś jakiś pomysł jak to 'rozdzielić' , by móc tego użyć mniej więcej tak:

  1. foreach($kupon as $row) {
  2. foreach $zdarzenie as $row {}
  3. }
nospor
No to musisz w php pogrupowac te dane. Tutaj pisalem jak:
http://nospor.pl/grupowanie-wynikow.html
L0k0
Robię wg tego tutoriala i jedna rzecz mi nie gra:

  1. $kupon = DB::select('*')->from('kupon')
  2. ->join('zdarzenia', 'left')
  3. ->on('kupon.id', '=', 'zdarzenia.id_kuponu')
  4. ->execute()->as_array();
  5.  
  6. // echo Debug::vars($kupon);
  7.  
  8. $categories = array();
  9.  
  10. foreach($kupon as $row)
  11. {
  12. $kid = $row['id_kuponu'];
  13.  
  14. if(!isset($categories[$kid]))
  15. {
  16. $kupon = array('data_godzina' => $row['data_godzina'],
  17. 'bukmacher' => $row['bukmacher'],
  18. 'rozliczenie' => $row['rozliczenie'],
  19. 'stawka' => $row['stawka'],
  20. 'ako' => $row['ako']
  21. );
  22. $categories[$kid]['kupon'] = array($kupon);
  23. }
  24.  
  25. if(!empty($row['nazwa']))
  26. {
  27. $categories[$kid]['zdarzenia'][] = array('nazwa' => $row['nazwa'],
  28. 'typ' => $row['typ'],
  29. 'kurs' => $row['kurs'],
  30. 'dyscyplina' => $row['dyscyplina'],
  31. 'analiza' => $row['analiza'],
  32. );
  33. }
  34. }


  1. echo Debug::vars($categories);


daje mi:

  1. array(1) (
  2. 1 => array(2) (
  3. "kupon" => array(1) (
  4. 0 => array(5) (
  5. "data_godzina" => string(16) "2014-02-25 13:49"
  6. "bukmacher" => string(6) "Bet365"
  7. "rozliczenie" => string(1) "0"
  8. "stawka" => string(3) "100"
  9. "ako" => string(1) "3"
  10. )
  11. )
  12. "zdarzenia" => array(2) (
  13. 0 => array(5) (
  14. "nazwa" => string(20) "Arsenal - Manchester"
  15. "typ" => string(9) "under 2.5"
  16. "kurs" => string(1) "2"
  17. "dyscyplina" => string(1) "2"
  18. "analiza" => string(29) "Warto postawić na gospodarzy"
  19. )
  20. 1 => array(5) (
  21. "nazwa" => string(17) "Bayern - Freiburg"
  22. "typ" => string(1) "1"
  23. "kurs" => string(1) "1"
  24. "dyscyplina" => string(1) "2"
  25. "analiza" => string(37) "Warto postawić na Bayern, bo ciśnie"
  26. )
  27. )
  28. )
  29. )


I wygląda to jak w tutku ale nie mogę się już tak odwołać jak w nim, muszę jeszcze [1] dodać by znalazło 'kupon'. Coś zrobiłem źle?

  1. <div class='section_container'>
  2. <div class='section_item_container'>
  3. <?php foreach($kupon[1]['kupon'] as $row => $value): ?>
  4. <?php echo Debug::vars($value); ?>
  5. <div class='section_coupon_container'>
  6. <div class='coupon_container_top'><?php // echo $value['data_godzina'] . ' ' . $value['bukmacher']; ?></div>
  7. <div class='coupon_container_middle'>44444</div>
  8. <div class='coupon_container_bottom'>oooooo</div>
  9. </div>
  10. <div class='section_comments_container'>
  11. Komenty
  12. </div>
  13. <?php endforeach; ?>
  14. </div>
  15. </div>
nospor
Nie: $categories[$kid]['kupon'] = array($kupon);
a: $categories[$kid] = $kupon;
L0k0
Znowu ja... Rzeczywiście powyższa zmiana mi pomogła z pierwszą tablicą ale analogiczną sytuację mam z drugą, tj.:

  1. $categories[$kid]['zdarzenia'][] = array('nazwa' => $row['nazwa'],
  2. 'typ' => $row['typ'],
  3. 'kurs' => $row['kurs'],
  4. 'dyscyplina' => $row['dyscyplina'],
  5. 'analiza' => $row['analiza'],


  1. <?php foreach($kupon[1]['zdarzenia'] as $zdarzenie):?>
  2. <?php echo $zdarzenie['nazwa']; ?>
  3. <?php endforeach; ?>


Jak zrobić, by tego [1] nie było?
nospor
Motasz niesamowicie.... zobacz jak wyglada teraz wygenerowana tablica.
L0k0
  1. array(1) (
  2. 1 => array(6) (
  3. "data_godzina" => string(16) "2014-02-25 13:49"
  4. "bukmacher" => string(6) "Bet365"
  5. "rozliczenie" => string(1) "0"
  6. "stawka" => string(3) "100"
  7. "ako" => string(1) "3"
  8. "zdarzenia" => array(2) (
  9. 0 => array(5) (
  10. "nazwa" => string(20) "Arsenal - Manchester"
  11. "typ" => string(9) "under 2.5"
  12. "kurs" => string(1) "2"
  13. "dyscyplina" => string(1) "2"
  14. "analiza" => string(29) "Warto postawić na gospodarzy"
  15. )
  16. 1 => array(5) (
  17. "nazwa" => string(17) "Bayern - Freiburg"
  18. "typ" => string(1) "1"
  19. "kurs" => string(1) "1"
  20. "dyscyplina" => string(1) "2"
  21. "analiza" => string(37) "Warto postawić na Bayern, bo ciśnie"
  22. )
  23. )
  24. )
  25. )
nospor
Ja to wiem.... to ty sie miales przyjrzec a nie ja... tongue.gif

Masz tu dwu wymiarową tablice. Czyli mają byc dwa foreach....
  1. foreach($kupon as $krow){
  2. foreach($krow['zdarzenia'] as $zdarzenie) {
  3. echo $zdarzenie['nazwa'];
  4. }
  5.  
  6. }
L0k0
No tak, nie zauważyłem, że drugi forach jest robiony na podstawie pierwszego i drugi zaczynałem 'od nowa'.

Dzięki smile.gif
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.