Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dane z pliku tablica?
Boshi
post 21.04.2015, 14:41:33
Post #1





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Mam sobie plik z kilkoma wierszami, odczytuje z niego dane przez funkcje file(wierszami) rozbijając je po separatorze funkcją explode.

Każdy wiersz powinien być nową tablicą? zwłaszcza, że potem muszę każdy wiersz wyświetlić na stronie po kolei. (do odpowiednich bloków html)
  1. $file=file("towary.txt");
  2. $McDonald=explode("|", $file[3]);
  3. $KFC=explode("|", $file[2]);


Wiersze pliku;

  1. hamburgery|McDonald|Hamburger Hebrajski|Hamburger hebrajski jest jednym z najbardziej napakowanych fastfoodów na świecie, spróbuj a się przekonasz|10|img/burger_sandwich_PNG413.png|img/mcdonald-s-psd-457848.png
  2. Pizze|PizzaHut|Pizza Watykańska|Pizza ta została poświęcona przez samego papieża-spróbuj jeśli masz odwagę|35|img/Pizza_margherita.png|img/PizzaHut.png



Jak posortować z tych dwóch tablic po cenie skoro tablica zawiera stringi, inty, png? Po prostu sortuję i na stronie mają się wyświetlać produkty w zależności od wielkości ceny

Ten post edytował Boshi 21.04.2015, 15:02:23
Go to the top of the page
+Quote Post
kreatiff
post 21.04.2015, 15:03:52
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Ja bym to zrobił tak: po wczytaniu przez file za pomocą array_map rozbiłbym każdy wiersz na podtablicę, a potem za pomoca usort dowolnie sortował (czyli np. po cenie). I dopiero posortowaną dawał do wyświetlania w pętli.

Albo jakimś iteratorem bym wczytywał linia po linii i od razu rozbijał każdą z nich na tablicę i wrzucał do tablicy wielowymiarowej.

Ten post edytował kreatiff 21.04.2015, 15:06:44
Go to the top of the page
+Quote Post
Boshi
post 21.04.2015, 15:27:19
Post #3





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Przykład? nie bardzo mogę to w pętli wypisać wszystko bo jak pisałem wyświetlane jest do odpowiednich bloków wszystko (bootstrapa)
np

  1. <div class="row">
  2. <div class="col-md-4">
  3. <div class="thumbnail">
  4. <?php echo $array['McDonald']; ?>
  5. <br>
  6. <div class="caption">
  7. <h3><?php echo $tablicaProduktow[1]; ?></h3>
  8.  
  9. <p><a href="Produkty.php?wartosc=McDonald" class="btn btn-primary btn-left" data-toggle="tooltip" data-placement="left" title="Produkty MCDonald!">Przejdź dalej</a></p>
  10. </div>
  11. </div>
  12. </div>
Go to the top of the page
+Quote Post
kreatiff
post 21.04.2015, 15:36:25
Post #4





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Zatem cały taki blok wędruje do pętli.

Jak już będziesz miał dowolnie stworzoną tablicę wielowymiarową, np.:
  1. $tablica = [
  2. 0 => ['typ' => 'hamburgery', 'producent' => 'McDonald', itd...],
  3. 1 => ['typ' => 'Pizze', 'producent' => 'PizzaHut', itd...]
  4. ]

To tablicę taką sobie sortujesz po dowolnym polu wspomnianą funkcją, a następnie w kodzie html dajesz:
  1. <?php foreach ( $tablica as $produkt ) : ?>
  2. <div class="row">
  3. <div class="col-md-4">
  4. <div class="thumbnail">
  5. <?php echo $produkt['miniatura']; ?>
  6. <br>
  7. <div class="caption">
  8. <h3><?php echo $produkt['typ']; ?></h3>
  9. <?php echo $produkt['opis']; ?>
  10. <p><a href="Produkty.php?wartosc=McDonald" class="btn btn-primary btn-left" data-toggle="tooltip" data-placement="left" title="Produkty <?php echo $produkt['producent']; ?>">Przejdź dalej</a></p>
  11. </div>
  12. </div>
  13. </div>
  14. <?php endforeach; ?>
itp.

Ten post edytował kreatiff 21.04.2015, 15:40:18
Go to the top of the page
+Quote Post
Boshi
post 21.04.2015, 15:44:00
Post #5





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Czekaj, czekaj, jakaś logika w tym jest biggrin.gif

Teraz jeszcze raz, jak to podzielić na wielowymiarową tablicę?

array_map? w sensie najpierw rozbić każdy wiersz na osobną tablicę funkcją explode i potem wszystkie tablice wrzucić do array_map?
Go to the top of the page
+Quote Post
kreatiff
post 21.04.2015, 15:57:40
Post #6





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


array_map to był przykład działania na gotowej tablicy, którą stworzy file. Ta funkcja sama w sobie nic nie tworzy, ale umozliwia edycję elementów istniejącej tablicy. Nie trzeba z niej korzystać, ale można, gdy cały plik wczytamy do pamięci od razu.

Możesz wykorzystać np. fgetcsv (1 przykład ze strony manuala), czy jakiś Iterator dostępny po stworzeniu obiektu klasy SplFileObject i tworzyć taką wielowymiarową tablicę już na etapie wczytywania pliku linia po linii (w tym wypadku cały plik nie wędruje do pamięci od razu - takie rozwiązanie będzie prawdopodobnie mnie pamięciożerne). Po prostu po wczytaniu linii następuje jej explode po "|" i dodanie tej podtablicy do jakiejś większej, wielowymiarowej.
Go to the top of the page
+Quote Post
Boshi
post 21.04.2015, 16:11:08
Post #7





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


A coś takiego z wykorzystaniem array_chunk? tablica wielowymiarowa z kluczami w każdej pod tablicy- czyli tyle ile ma każdy wiersz.

$wynikowa=array_merge_recursive($tablicaProduktow,$tablicaProduktowPizze,$tabliceproduktowKurczaki);

$rows = array_chunk($wynikowa, 7);

Wynik:

Array
(
[0] => Array
(
[0] => hamburgery
[1] => McDonald
[2] => Hamburger Hebrajski
[3] => Hamburger hebrajski jest jednym z najbardziej napakowanych fastfood�w na �wiecie, spr�buj a si� przekonasz
[4] => 10
[5] => img/burger_sandwich_PNG413.png
[6] => img/mcdonald-s-psd-457848.png

)

[1] => Array
(
[0] => Pizze
[1] => PizzaHut
[2] => Pizza Watyka�ska
[3] => Pizza ta zosta�a po�wi�cona przez samego papie�a-spr�buj je�li masz odwag�
[4] => 35
[5] => img/Pizza_margherita.png
[6] => img/PizzaHut.png

)

[2] => Array
(
[0] => Kurczaki
[1] => KFC
[2] => Kurczak z warzywami
[3] => Kurczam z warzywami to jedyny w Europie kurczak zawieraj�cy niespotykane ilo�ci oraz rodzaje owoc�w- czy odwa�ysz si� i zaryzykujesz?
[4] => 20
[5] => img/kurczak-z-rozna.png
[6] => img/kfc-logo-2.png

)

)
Go to the top of the page
+Quote Post
kreatiff
post 21.04.2015, 16:18:11
Post #8





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


To, które funkcje wykorzystasz to już kwestia optymalizacyjna. Wynik Twoich działań wygląda jak to co chcemy osiągnąć, więc jest w porządku.
Po prostu potem w kodzie zamiast odwołań w pętli do $tablica['produkt'], znajdzie się $tablica[0], itd. Będzie to działało dokładnie tak samo, a różnica to po prostu mniej czytelny zapis.
Go to the top of the page
+Quote Post
Boshi
post 21.04.2015, 16:25:46
Post #9





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


Tak przetestowałem, faktycznie działa. A teraz jak to posortować? wg ceny?

coś takiego ?

  1. function sortuj ($x, $y)
  2. {
  3. if ($x[4]>$y[4]) return 1;
  4. else if ($x[4]==$y[4]) return 0;
  5. else if ($x[4]<$y[4]) return -1;
  6. usort($tab,'sortuj');
  7. }


Dobra kreatiff twoja pomoc okazała się nieoceniona, funkcja sortująca działa świetnie smile.gif Dzięki za pomoc!

Ten post edytował Boshi 21.04.2015, 16:49:17
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 18:46