Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pętla foreach w pętlli foreach.
Forum PHP.pl > Forum > Przedszkole
php__amator
Witajcie przedszkolacy,

Ostatnimi czasy napotykam na problemy z którymi próbuję sobie poradzić. I teoretycznie powinienem, ponieważ bawię się w to już kilka miesięcy ...
a po takim czasie nawet kowadło by się już nauczyło.
Ja jednak chyba jeszcze nie. ale do rzeczy.
Otóż mam taki skrypt:
  1. <?php foreach ($products as $product) { ?>
  2.  
  3. <tr>
  4. <?php if($invpicav2==1){ ?> <td width="50"><?php $imageproduct1 = base64_encode(file_get_contents($product['thumb'])); ?><img src="data:image/png;base64,<?php echo $imageproduct1;?>" alt=""><td><?php echo $product['name']; ?> <?php } else { ?>
  5. <td><?php echo $product['name']; ?> <?php } ?>
  6.  
  7.  
  8.  
  9. <?php foreach ($product['option'] as $option) { ?>
  10.  
  11. <br />
  12.  
  13. &nbsp;<small> - <?php echo $option['name']; ?>: <?php echo $option['value']; ?> <?php echo $option['sku']; $code .= $option['sku'];?></small>
  14.  
  15. <?php }
  16.  
  17. $ccode = ($product['sku'].$code);
  18.  
  19. ?></td>
  20.  
  21. <!-- <td><?php echo $product['model']; ?></td> -->
  22.  
  23. <?php if($inv_skuca2==1){ ?> <td><?php echo $product['sku']; ?></td> <?php } ?>
  24.  
  25. <td align="right"><?php echo $product['quantity']; ?></td>
  26.  
  27. <td align="right"><?php echo $product['price']; ?></td>
  28.  
  29. <td align="right"><?php echo $product['total']; ?></td>
  30.  
  31. </tr>
  32.  
  33. <?php } ?>
  34.  
  35. <?php foreach ($vouchers as $voucher) { ?>
  36.  
  37. <tr>
  38. <td align="center"></td>
  39. <td align="center"><?php echo $voucher['description']; ?></td>
  40. <td align="center"></td>
  41.  
  42. <td align="center"></td>
  43.  
  44. <td align="center">1</td>
  45. <td align="center"><?php echo $voucher['amount']; ?></td>
  46. <td align="center"><?php echo $voucher['amount']; ?></td>
  47. </tr>
  48.  
  49.  
  50. <?php } ?>
  51.  
  52. <?php foreach ($totals as $total) { ?>
  53.  
  54. <tr>
  55.  
  56. <?php if($invpicav2==1 && $inv_skuca2==1){ ?> <td align="right" colspan="6"> <?php } else {
  57. if($invpicav2==1 && $inv_skuca2==0) {?> <td align="right" colspan="5"> <?php } else {
  58. if($invpicav2==0 && $inv_skuca2==1) {?> <td align="right" colspan="5"> <?php } else {
  59. if($invpicav2==0 && $inv_skuca2==0) {?> <td align="right" colspan="4"> <?php } } } } ?>
  60.  
  61. <b><?php echo $total['title']; ?>:</b></td>
  62.  
  63. <td align="right"><?php echo $total['text']; ?>

i jak dotąd wszystko "gites".
Nieco niżej mam dalszą część:
  1. <div class="break"></div>
  2. <?php
  3. $PNG_TEMP_DIR = dirname(__FILE__).DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR;
  4. $PNG_WEB_DIR = '../store/qrcode/temp/';
  5. include ('../store/qrcode/qrlib.php');
  6. if (!file_exists($PNG_TEMP_DIR))
  7. mkdir($PNG_TEMP_DIR);
  8. $filename = $PNG_TEMP_DIR.$ccode.'.png';
  9. $errorCorrectionLevel = 'H';
  10. if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L','M','Q','H')))
  11. $errorCorrectionLevel = $_REQUEST['level'];
  12. $matrixPointSize = 1;
  13. if (isset($_REQUEST['size']))
  14. $matrixPointSize = min(max((int)$_REQUEST['size'], 1), 5);
  15. if (isset($_REQUEST['data'])) {
  16. if (trim($_REQUEST['data']) == '')
  17. die('data cannot be empty!');
  18. $filename = $PNG_TEMP_DIR.$ccode.md5($_REQUEST['data'].'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png';
  19. QRcode::png($_REQUEST['data'], $filename, 'H', 5, 1);
  20. } else {
  21. QRcode::png($ccode, $filename, 'H', 5, 1);
  22. }
  23. ?>
  24. <table width="454">
  25. <tr>
  26. <td width="100" rowspan="10" align="center" border="1">
  27. <img src="http://www.gngcomputers.com/store/catalog/view/theme/default/template/mail/temp/<?php echo $ccode;?>.png">
  28. </td>
  29. <td align="center" width="500">
  30. <h1>ORDER DETAILS</h1>
  31. </td>
  32. </tr>
  33. <tr>
  34. <td>Order number <?php echo $order_id;?>
  35.  
  36. </td>
  37. </tr>
  38. <td><h5>Item specification</h5>
  39. </td>
  40. </tr>
  41. <?php
  42.  
  43.  
  44. foreach ($product['option'] as $option) { ?>
  45.  
  46. <tr><td>
  47.  
  48. <small>- <?php echo $option['name']; ?>: <?php echo $option['value']; ?> <?php echo $option['sku'];?></small></td><td><small><?php $code .= $option['sku'];?><?php } ?></small></td></tr>
  49.  
  50.  
  51.  
  52. <tr>
  53. <td>
  54. <?php echo $product['name']; ?>
  55. </td>
  56. </tr>
  57. </table>

I dotąd też wszystko jest ok ale ... no właśnie jeśli w tablicy jest/są dane dotyczące jednego produktu działa jak złoto, natomiast jeśli w tablicy znajduje się więcej niż jeden produkt(dane dla kilku) dopstaję tylko te dotyczące ostatniego.

Domyślam się, że żeby wygenerowało mi dane dla wszystkich po kolei muszę dodać kolejną pętlę foreach ale nie bardzo wiem jak się do tego zabrać. Kiedyś przerabiałem taki przykład generujący z 3 składowych wszystkie możliwe zestawy.


Czy dobrą idę drogą ?
czychacz
Ostatnie
  1. <?php echo $product['name']; ?>
jest poza pętlą.
php__amator
Cytat(czychacz @ 20.10.2014, 13:18:45 ) *
Ostatnie
  1. <?php echo $product['name']; ?>
jest poza pętlą.

Hej czychaczu,
owszem ale to akurat nie ma znaczenia bo z tej zmiennej tylko jest podpis pod kodem(obrazkiem)

Dzisiaj trochę posiedziałem i chyba wiem jak rozwiązać problem, chociaż do tej pory tego nie zrobiłem smile.gif
Ale mam koncepcję smile.gif a to już coś smile.gif
Szczególnie jak na amatora smile.gif
Ale wracając do tematu.

Wcześniej o tym nie pomyśłałem ale wydaje mi się, że mogę poprostu powielić fragment w którym pierwsza pętla foreach generuje tablkę i na bazie tego samego kodu zrobić kolejną ale już z danymi które są potrzebne (pozostałe wywalić) i dodać elementy takie jak np QRcode itd.
Muszę to przetestować 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.