Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Jak zbudować tabelkę z arraya w arrayu ?
Forum PHP.pl > Forum > Przedszkole
phpamator
Hejka rebiata,

Napotkałem problem z którym ni jak nie wiem jak sobie poradzić wink.gif
Właściwie to wiem ale coś mi nie idzie.
Otóż jako wynik wybierania danych z bazy otrzymuję coś takiego:
  1. array(1) { [0]=> array(13) { ["sku"]=> string(9) "bsr4739cl" ["entity_id"]=> string(4) "7391" ["name"]=> string(35) "ABC Design Takeoff Stroller - Coral" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(20) "/5/1/51076-501_1.jpg" ["url_path"]=> string(38) "abc-design-takeoff-stroller-coral.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(6) "310.00" } } array(1) { [0]=> array(13) { ["sku"]=> string(9) "bsr4739cr" ["entity_id"]=> string(4) "7392" ["name"]=> string(39) "ABC Design Takeoff Stroller - Cranberry" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(20) "/5/1/51076-502_1.jpg" ["url_path"]=> string(42) "abc-design-takeoff-stroller-cranberry.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(4) "3.00" } } array(1) { [0]=> array(13) { ["sku"]=> string(9) "bsr4743cr" ["entity_id"]=> string(4) "7396" ["name"]=> string(38) "ABC Design Avito Pushchair - Cranberry" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(22) "/5/1/51075-502_1_1.jpg" ["url_path"]=> string(41) "abc-design-avito-pushchair-cranberry.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(6) "372.00" } } array(1) { [0]=> array(13) { ["sku"]=> string(9) "bsr4743lm" ["entity_id"]=> string(4) "7397" ["name"]=> string(33) "ABC Design Avito Pushchair - Lime" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(20) "/5/1/51075-503_1.jpg" ["url_path"]=> string(36) "abc-design-avito-pushchair-lime.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(7) "-385.00" } } array(1) { [0]=> array(13) { ["sku"]=> string(10) "bsr4758bcr" ["entity_id"]=> string(4) "7403" ["name"]=> string(51) "ABC Design Cobra 2 in 1 Pushchair - Black/Cranberry" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "459.9900" ["special_price"]=> string(8) "420.0000" ["final_price"]=> string(8) "420.0000" ["image"]=> string(23) "/3/1/31171-530502_1.jpg" ["url_path"]=> string(54) "abc-design-cobra-2-in-1-pushchair-black-cranberry.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(6) "166.00" } }
Co to jest ?
Otóż jest to tablica a w niej kolejnych 5 tablic. Mając taki miszmasz do dyspozycji chciałbym bez o ile to mozliwe specjalnych kombinacji wyciągać dane w kolejności:
index1 - ["sku"] ..... kolejno ze wszystkich tablic,
index2 - ["entity_id"] ..... kolejno ze wszystkich tablic,
itd ... itd ...
nie wiem jednak jak to zrobić.
Próbowałem tak:
Pewnie zwróciliście uwagę na to, że wszystkie tablice to array(1), no własnie, w tej chwili wpadło mi to w oko. Chyba muszę dodać jakiś ekstra licznik bo jak miałbym rozróżnić która ma być czytana ?
Dobrze kombinuję ?
A może poprostu sam proces ich generowania powinienem wziąć pod lupę ?
  1. <?php
  2. $output =
  3. array(1) {[0]=> array(13) ( ["sku"]=> string(9) "bsr4739cl" ["entity_id"]=> string(4) "7391" ["name"]=> string(35) "ABC Design Takeoff Stroller - Coral" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(20) "/5/1/51076-501_1.jpg" ["url_path"]=> string(38) "abc-design-takeoff-stroller-coral.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(6) "310.00" }
  4. }
  5.  
  6. array(1) {[0]=> array(13) { ["sku"]=> string(9) "bsr4739cr" ["entity_id"]=> string(4) "7392" ["name"]=> string(39) "ABC Design Takeoff Stroller - Cranberry" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(20) "/5/1/51076-502_1.jpg" ["url_path"]=> string(42) "abc-design-takeoff-stroller-cranberry.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(4) "3.00" }
  7. }
  8.  
  9. array(1) { [0]=> array(13) { ["sku"]=> string(9) "bsr4739lm" ["entity_id"]=> string(4) "7393" ["name"]=> string(34) "ABC Design Takeoff Stroller - Lime" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(20) "/5/1/51076-503_1.jpg" ["url_path"]=> string(37) "abc-design-takeoff-stroller-lime.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(6) "596.00" }
  10. }
  11.  
  12. array(1) {[0]=> array(13) { ["sku"]=> string(9) "bsr4743cl" ["entity_id"]=> string(4) "7395" ["name"]=> string(34) "ABC Design Avito Pushchair - Coral" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(20) "/5/1/51075-501_1.jpg" ["url_path"]=> string(37) "abc-design-avito-pushchair-coral.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(6) "236.00" }
  13. }
  14.  
  15. array(1) { [0]=> array(13) { ["sku"]=> string(9) "bsr4743cr" ["entity_id"]=> string(4) "7396" ["name"]=> string(38) "ABC Design Avito Pushchair - Cranberry" ["manufacturer_id"]=> string(4) "1662" ["manufacturer_name"]=> string(10) "ABC Design" ["price"]=> string(8) "249.9900" ["special_price"]=> string(8) "200.0000" ["final_price"]=> string(8) "200.0000" ["image"]=> string(22) "/5/1/51075-502_1_1.jpg" ["url_path"]=> string(41) "abc-design-avito-pushchair-cranberry.html" ["percent_approved"]=> NULL ["vote_count"]=> NULL ["rating"]=> string(6) "372.00" }
  16. };
  17.  
  18. $c=1;
  19.  
  20. ?>
  21. <table border="1">
  22. <tr>
  23. <th></th>
  24. <?php
  25. foreach ($output as $key => $html)
  26. {
  27. echo "<th>SKU ".$key."</th>";
  28. }
  29. ?>
  30. </tr>
  31. <tr>
  32. <td>SKU</td>
  33. <?php
  34. foreach ($output as $key => $html)
  35. {
  36. echo "<td>".$html['sku']."</td>";
  37. }
  38. ?>
  39. </tr>
  40. </table>
  41.  


Podpowiedzcie ..... proszę wink.gif
mlawnik
Przeformatuj ten output bo aż oczy bolą
phpamator
Ok, zrobię to ... ale jak ? wink.gif
Tu pojawia się problem bo nie wiem jeszcze jak się do tego "przeformatowania" zabrać a że oczy bolą ... to prawda smile.gifsmile.gif

W zasadzie to poza chęcią wrzucenia tego do tabeli problemu nie ma, foreach czyta te tablice bez problemu. Chodzi mi jednak o wrzucenie wartości do tabeli w rzędach.
Czyli:
  1. <tr><td> produkt1 </td><td> produkt2 </td><td> produkt3 </td></tr>
  2.  
  3. <tr><td>parametr1</td><td>parametr1</td><td>parametr1</td></tr>
  4.  
  5. <tr><td>parametr2</td><td>parametr2</td><td>parametr2</td></tr>
  6.  
  7. <tr><td>parametr3</td><td>parametr3</td><td>parametr3</td></tr>
  8.  
  9. <tr><td>parametr4</td><td>parametr4</td><td>parametr4</td></tr>
  10.  

Pyton_000
echo '<pre>'; var_dump($tabliac);

Poza tym masz skopane generowanie tablicy. Pokaż kod.
IAmBoskiM
Ja sobie zrobiłem taką funkcję:
  1. function pre ($arr, $var = false) {
  2. echo '<pre>';
  3. if ($var) {
  4. var_dump($arr);
  5. } else {
  6. print_r($arr);
  7. }
  8. echo '</pre>';
  9. }
phpamator
Tablice dostaje w skutek wyciagniecia danych z bazy przy pomocy:
  1.  
  2. public function CompareAction(){
  3. $items = Mage::app()->getRequest()->getPost('items', false);
  4. $this-> connection = Mage::getSingleton('core/resource')->getConnection('core_read');
  5. $items = explode(',',$items);
  6.  
  7. echo $items,"tu dostaje tablice Ajax'em w której znajduja sie od 2 do 5 sku po których petla ponizej wybiera dane produktu.";
  8.  
  9. $content = '<div class="return">';
  10. foreach($items as $it){
  11. $row = array();
  12. $sql = "SELECT * FROM `edpa_product_collection` WHERE `sku` = {$it} ";
  13. $row = ($this->connection->fetchAll($sql));
  14. foreach($row as $col){
  15.  
  16. }
  17. }
  18.  


a var _ dump ( ) ; widziales w poprzednim poscie smile.gif
Po zastosowaniu twojej funkcji efektem jest:

  1. (
  2. [sku] => bsr4739cl
  3. [entity_id] => 7391
  4. [name] => ABC Design Takeoff Stroller - Coral
  5. [manufacturer_id] => 1662
  6. [manufacturer_name] => ABC Design
  7. [price] => 249.9900
  8. [special_price] => 200.0000
  9. [final_price] => 200.0000
  10. [image] => /5/1/51076-501_1.jpg
  11. [url_path] => abc-design-takeoff-stroller-coral.html
  12. [percent_approved] =>
  13. [vote_count] =>
  14. [rating] => 310.00
  15. )
  16. (
  17. [sku] => bsr4739cr
  18. [entity_id] => 7392
  19. [name] => ABC Design Takeoff Stroller - Cranberry
  20. [manufacturer_id] => 1662
  21. [manufacturer_name] => ABC Design
  22. [price] => 249.9900
  23. [special_price] => 200.0000
  24. [final_price] => 200.0000
  25. [image] => /5/1/51076-502_1.jpg
  26. [url_path] => abc-design-takeoff-stroller-cranberry.html
  27. [percent_approved] =>
  28. [vote_count] =>
  29. [rating] => 3.00
  30. )
  31. (
  32. [sku] => bsr4739lm
  33. [entity_id] => 7393
  34. [name] => ABC Design Takeoff Stroller - Lime
  35. [manufacturer_id] => 1662
  36. [manufacturer_name] => ABC Design
  37. [price] => 249.9900
  38. [special_price] => 200.0000
  39. [final_price] => 200.0000
  40. [image] => /5/1/51076-503_1.jpg
  41. [url_path] => abc-design-takeoff-stroller-lime.html
  42. [percent_approved] =>
  43. [vote_count] =>
  44. [rating] => 596.00
  45. )

Jest teraz jakby nieco czytelniej ...

Jak z tego zrobic teraz:
  1. [sku] => bsr4739cl,bsr4739cr,bsr4739lm
  2. [entity_id] => 7391,7392,7393
  3. ...

no chyba , ze powinienem to zrobic inaczej ?
W zasadzie to powinienem chyba od razu powiedziec, ze morduje sie z Magento, moze to troche pomoze.
Wszak Magento posiada bardzo ciekawe mechanizmy o ktorych prawdopodobnie nawet nie wiem lub poprostu
jeszcze nie doszedlem do tego etapu smile.gif i zrobilbym wszystko szybciej i prosciej ?



W zasadzie wszystko czego potrzebuję to zbudować tabelkę, taka prosta sprawa wink.gif .... przepisał bym te tablice do jednej ale coś mi nie idzie. Nie wiem jak spowodować aby nadać tym tablicom kolejne numery (a to chyba pomogło by w ich identyfikacji i wybieraniu elementów w nich zawartych czy tylko tak mi się wydaje questionmark.gif)
mlawnik
Potrzebujesz funkcji foreach.
Przelatujesz po tych wszystkich tablicach i dodajesz do nowej w taki sposób:

  1. foreach($poczatkowaTablica as $tablica){
  2. $koncowaTablica['sku'] .= $tablica['sku'];
  3. }


Przy czym poczatkowaTablica zawiera wszystkie te tablice co masz zwrócone.
trueblue
Cytat(PHPRexio @ 12.07.2016, 11:00:54 ) *
Jak z tego zrobic teraz:
  1. [sku] => bsr4739cl,bsr4739cr,bsr4739lm
  2. [entity_id] => 7391,7392,7393
  3. ...



  1. public function CompareAction(){
  2. $items = Mage::app()->getRequest()->getPost('items', false);
  3. $this-> connection = Mage::getSingleton('core/resource')->getConnection('core_read');
  4.  
  5. $content = '<div class="return">';
  6.  
  7. $sql = "SELECT GROUP_CONCAT(entity_id ORDER BY entity_id) as entity_ids,GROUP_CONCAT(sku ORDER BY entity_id) as skus FROM `edpa_product_collection` WHERE `sku` in (".$items.") ";
  8.  
  9. $row = ($this->connection->fetch($sql));
mlawnik
Rozwiązanie @trueblue jest lepsze od mojego. (Będzie wydajniejsze)
phpamator
Dzięki panowie,
W wyniku działania otrzymałem:
  1. array(1) { [0]=> array(2) { ["entity_ids"]=> string(14) "7391,7395,7396" ["skus"]=> string(29) "bsr4739cl,bsr4743cl,bsr4743cr" } }


Trochę mnie rozjaśniło wink.gif
Chociaż jeszcze mam pytania, np
  1. $sql = "SELECT GROUP_CONCAT(entity_id ORDER BY entity_id) as entity_ids,GROUP_CONCAT(sku ORDER BY entity_id) as skus FROM `edpa_product_collection` WHERE `sku` in (".$items.") ";

to query wyciaga entity_id i sku, układa w tablicy kolejno co samo w sobie jest piekne smile.gif
czyli teraz mam wynik wrzucić do kolejnej pętli i w tym samym szyku wyciągnąć i zbudować tabelkę czy poprostu dodać pozostałe elementy w ten sam sposób to tego query co de'facto powinno zadziałać tyle ze query będzie długie jak tasiemiec?
trueblue
Przecież wynik już jest tabelką.
Jeśli chcesz to zmień aliasy w zapytaniu, aby klucze w tablicy miały takie nazewnictwo jak chcesz.
phpamator
Miałem na myśli wrzucić do tabelki <html> smile.gif
Pozostając w temacie jak według doświadczonego kolegi najlepiej wrzucić to własnie w tabelkę hjtml do pokazania na stronie ?
trueblue
To jaki sens jest sklejać id i sku? Przecież teraz po odebraniu danych będziesz musiał ponownie rozkleić wartości.

Lepsza by była tablica, którą pokazałeś wcześniej, ale okrojona do id i sku:
Kod
Array
(
    [sku] => bsr4739cl
    [entity_id] => 7391
)
Array
(
    [sku] => bsr4739cr
    [entity_id] => 7392
)

itd.
phpamator
Nie nie, czekaj, wkradło się jakies drobne nieporozumienie.
Celem tej operacji było w zasadzie utworzenie tablicy z której następnie dane będe wrzucał do tabeli html.
Ale nie w pionowe kolumny tylko rzędami.

czyli co ? Znowu jak zwykle przekombinowałem ?smile.gif
Szkoda, że nie można na szybko wrzucać obrazków, pokazał bym ci o co dokladnie mi chodzi.
A może jest jakaś inna droga, żeby wypełniać/formatować tabelki?

Po chwili zastanowienia doszedłem do wniosku, że chyba źle jednak opisałem o co mi chodzi i jak miały by być dane z tablicy umieszczane w tabeli html sad.gif
Otóż czytając kolejne produkty(tablica dla każdego osobno) skrypr generuje kolejne bloki (div) i umieszcza je obok siebie co nie jest dobrym sposobem na prezentację danych.
tak więc dla całkowitego wyjaśnienia sytuacji, miałem na myśli takie ułożenie danych w tablicy aby czytając kolejne produkty można było je umieścić w tabeli a nie w div'ach to po pierwsze a po drugie
nazwa produktu w pierwszym rzędzie i odpowiednio dane w rzędach.
Oczywiście mam nadzieję wiesz o czym bredzę ?



trueblue
Jeśli chcesz prezentować produkty w kolumnach/pionowo tj. każdy produkt to osobna kolumna (pierwszy rząd nazwa, kolejne rzędy dane - tak to opisałeś), to dane sklejone będą łatwiejsze przy prezentacji danych.
Jeśli chcesz prezentować produkty w rzędach/poziomo, to dane w postaci tablicy, którą pokazałeś, ewentualnie okrojonej, będą lepsze.
phpamator
Zabiłeś mi ćwieka ......
Ni potrafię sobie z tym poradzić chwilowo.
Tak bym chciał/tak sobie to wyobrażałem smile.gif

a tak mam obecnie ... czyli z ......do bani.
ponadto taka forma jest jakby trudniejsza do formatowania na stronie ...

trueblue
Nie widzę między tymi dwiema tabelami różnicy. Jedyne co to inna kolejność danych i etykiety w pierwszej tabeli.
W obydwu tabelach dane są prezentowane w kolumnach/pionowo (pierwszy rząd nazwa, kolejne rzędy dane).
phpamator
Sugerujesz, że mogę zbudować tabelę uzywając pierwotnej tablicy/w tablicy i osiągnę ten sam efekt ?
To bardzo interesujące smile.gif
A jak miałbym tego dokonać ?
Załóżmy, że mam:
  1. $mojatablica = Array
  2. (
  3. [sku] => bsr4739cr
  4. [entity_id] => 7392
  5. [name] => ABC Design Takeoff Stroller - Cranberry
  6. [manufacturer_id] => 1662
  7. [manufacturer_name] => ABC Design
  8. [price] => 249.9900
  9. [special_price] => 200.0000
  10. [final_price] => 200.0000
  11. [image] => /5/1/51076-502_1.jpg
  12. [url_path] => abc-design-takeoff-stroller-cranberry.html
  13. [percent_approved] =>
  14. [vote_count] =>
  15. [rating] => 3.00
  16. )
  17. (
  18. [sku] => bsr4739lm
  19. [entity_id] => 7393
  20. [name] => ABC Design Takeoff Stroller - Lime
  21. [manufacturer_id] => 1662
  22. [manufacturer_name] => ABC Design
  23. [price] => 249.9900
  24. [special_price] => 200.0000
  25. [final_price] => 200.0000
  26. [image] => /5/1/51076-503_1.jpg
  27. [url_path] => abc-design-takeoff-stroller-lime.html
  28. [percent_approved] =>
  29. [vote_count] =>
  30. [rating] => 596.00
  31. );
  32. $tabelka = '<table>';
  33. // przepuszczam przez foreach($mojatablica as $product){
  34. $tabela .= '<tr><td>';
  35. $tabela .= ' '.$product['price'].'</td><td>'.$product['price'].'</td><td>'.$product['price'].'</td></tr>';
  36. //i nie wiem jak dalej budować taką tabelke... dodatkowo ilość produktów nie jest stała tylko zalezy od klienta ile sobie pobierze do porównania
  37. //muszę się skupić ....
  38.  
  39. }


Wcześniej pytałem czy php poradzi sobie jeśli array to tablica składająca się z kilku tablic które nijak się nie różnią, wszystki nazywają się tak samo.
Jak więc na podstawie takiej tablicy cokolwiek budować ?
Inna sprawa, że chyba moje podejście jest także trochę od ....tyłu.
Bo dostaję ajaxem listę sku po których kolejno wyszukuję produkty i od razu generuję boxy/div'y z danymi, może zamiast od razu pakować to
do formatek powinienem najpierw utworzyć ogólną tablicę i dopiero czytać dane i wpychać w te div'ki ?

questionmark.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.