Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]wybieranie duplikatów z tablicy i ....
phpamator
post 8.02.2021, 21:55:32
Post #1





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

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


Hello hello, tu znowu Ja wasz phpamator tongue.gif

Potrzebuję pomocy w takiej kwestii.
Mam tablicę w której mam np 20 wierszy. W tych wierszach występuje w jednej z kolumn ta sama wartość i .... część innych wartości jest inna. Chciałbym wyciągać kolejno tylko te wiersze w których występuje np "ala ma kota"
po czym utworzoną tablicę przepuścić przez loop i poukładać tak aby utworzyć jeden wiersz ale w kolumnach tam gdzie wartości są rózne budowały się kolejne tablice.
Chyba zamieszałem ...

przykład:

CSV:
ID, Nazwa, ilość, dodatek1, dodatek2, dodatek3
1,Nazwa1,1,czeresnia,banan,ogorek
2,Nazwa2,10,wisnia,pomidor,ogoirek
3,Nazwa1,15,jablko,gruszka,por
4,Nazwa2,10,wisnia,pomidor,ogoirek
5,Nazwa2,10,wisnia,pomidor,ogoirek
(wciągam i przerabiam do tablicy asocjacyjnej - z headerami)

I teraz w prosty sposób chciałbym wyciągnąc najpierw Nazwa1 i pozbierać dp kupy dadatki
następnie Nazwa 2 i to samo

tyle, że nie bardzo wiem jak się do tego zabrać ....

Podpowiedzcie proszę ....

pomyślałem, że mógłbym w pierwszej kolejności utworzyć listę "nazw" i następnie kolejno wybierać te wiersze w których nazwa = nazwa1 i zbierać dane następnie nazwa2 i zbierać
czy to głupi pomysł ?


Ten post edytował phpamator 8.02.2021, 22:02:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
YourFrog
post 9.02.2021, 11:18:47
Post #2





Grupa: Zarejestrowani
Postów: 124
Pomógł: 22
Dołączył: 10.01.2014

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


Jeśli dobrze zrozumiałem to spróbuj coś takiego (później przeczytaj moją uwagę na dole)

  1. <?php
  2.  
  3. $content = 'ID, Nazwa, ilość, dodatek1, dodatek2, dodatek3
  4. 1,Nazwa1,1,czeresnia,banan,ogorek
  5. 4,Nazwa2,10,wisnia,pomidor,ogoirek
  6. 2,Nazwa2,10,wisnia,pomidor,ogoirek
  7. 3,Nazwa1,15,jablko,gruszka,por
  8. 4,Nazwa2,10,wisnia,pomidor,ogoirek
  9. 5,Nazwa2,10,wisnia,pomidor,ogoirek';
  10.  
  11. # Mapujemy string'a na tablice
  12. $arr = array_map('trim', str_getcsv($content, "\n"));
  13.  
  14. # Wyciagamy nagłówki
  15. $header = str_getcsv($arr[0]);
  16.  
  17. # Wyciągamy rekordy z danych
  18. $records = [];
  19. $cc = count($arr);
  20. for($i = 1; $i < $cc; $i++) {
  21. $records[] = str_getcsv($arr[$i]);
  22. }
  23.  
  24. # Szukamy indeksu kolumny na podstawie nagłówka
  25. $columnIndex = array_search('Nazwa', $header);
  26.  
  27. # Wyszukujemy unikalnych wartości w danej kolumnie
  28. $columnValues = array_unique(array_column($records, $columnIndex));
  29.  
  30. $cc = count($columnValues);
  31. for($i = 0; $i < $cc; $i++) {
  32. $columnValue = $columnValues[$i];
  33.  
  34. foreach($records as $record) {
  35. if( $record[$columnIndex] != $columnValue ) {
  36. continue;
  37. }
  38.  
  39. # Tutaj już jesteś pewien że będziesz miał elementy w kolejności
  40. var_dump('---' . $i, $record);
  41. }
  42. }



Tego rozwiązania nie wolno wykorzystywać dla dużych plików CSV ponieważ mocno będzie zżerać pamięć komputera. W takich przypadkach radzę kilka razy przejść po pliku przy pomocy "fgetcsv"
Go to the top of the page
+Quote Post

Posty w temacie


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: 22.06.2025 - 05:29