Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Operacja na dwuwymiarowej tabeli
Forum PHP.pl > Forum > Przedszkole
nss
Mam pytanie odnośnie operacji na tabeli dwuwymiarowej.

Zczytuję z pliku rekordy w pętli foreach rozdzielone spacjami, oczyszczam je z spacji i błędów i zrzucam z powrotem do pliku.
Parsuję wszystko linia po linii i zrzucam rozdzielając najpierw linie na tablicę elementów (kolumn) , czyszczę , scalam średnikiem , wrzucam do pliku
plik wynikowy wygląda podobnie jak niżej.

182312;nazwa;12;85.61;23
31483213;nazwainna;1;75.22;23
itd.

ID produktu; nazwa produktu; liczebność ; cena ; vat

Problem jest taki, że plik wejściowy może mieć wiele linii z tym samym produktem (id) i nazwą , ale z inną ceną i inną liczebnością (różne dostawy na magazyn)
Chciałbym w sytuacji powtórzeń scalań liczebność i wybierać wyższą cenę

np.

31483213;nazwainna;1;75.22;23
31483213;nazwainna;5;95.22;23
31483213;nazwainna;4;25.22;23

zamienia na
31483213;nazwainna;10;75.22;23

Czy da się to zrobić już w etapie wstepnego czyszczenia kodu linia po linii w petli foreach. Jeżeli nie to jak to ogólnie ogarnąć.
CuteOne
  1. $array = array();
  2. foreach($rows as $row) {
  3.  
  4. if(isset($array[$row['id']])) {
  5.  
  6. if($array[$row['id']]['cena'] < $row['cena'])
  7.  
  8. $array[$row['id']]['cena'] = $row['cena'];
  9. }
  10. $array[$row['id']]['ilosc'] += $row['ilosc'];
  11. }
  12. else {
  13.  
  14. $array[$row['id']] = array(
  15. 'cena' => $row['cena'],
  16. 'ilosc' => $row['ilosc']
  17. );
  18. }
  19. }
nss
Hmm

Spróbowałem to przetestować i na początku dostałem

>syntax error, unexpected T_ELSE

Dodałem klamrę otwierającą po
  1. if($calosc[$row['id']]['cena'] < $row['cena'])
  2. {


i dostaję
>syntax error, unexpected T_DOUBLE_ARROW
dla linii

  1. $calosc[$row['id']] = calosc('cena' => $row['cena'],'ilosc' => $row['ilosc']);


Jeszcze taka sprawa. Na początku zmieniam nazwy kolumn na numeryczne bo tak chyba powinno być to zapisane. Tak mam zapisaną bazę.

  1. foreach($rows as $row) {
  2. $row['id'] = $row[0];
  3. $row['cena'] = $row[3];
  4. $row['ilosc'] =$row[2];
CuteOne
nie "calosc" tylko "array" - tablica
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.