Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wybieranie duplikatów z tablicy i ....
Forum PHP.pl > Forum > Przedszkole
phpamator
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ł ?
Tomplus
Zamieszałeś.

Ale jeżeli masz to jako CSV, to nie lepiej od razu zamienić kod na tablicę, a następnie iterować po niej, wyszukując w kluczu [1] nazwę "Ala ma kota"? Dzięki temu, szybciej i efektywniej wyświetlisz oczekiwaną treść niż szukając linia po linii, a potem zamieniając na tablicę.
phpamator
trochę zamieszałem.

Dlatego pomyślałem, że najlepiej byłoby w pierwszej kolejności utworzyć listę nazw i następnie lecieć kolejno przez tablicę wybierając wiersze w których nazwa = wartość z listy ....

Zacząłem tak:
  1.  
  2. // wczytuje plik
  3. $rows = array_map('str_getcsv', file('test_2.csv'));
  4.  
  5. $header = array_shift($rows);
  6.  
  7. $csv = array();
  8. // przepuszczam aby utworzyć tablicę asocjacyjną
  9. foreach($rows as $row)
  10. {
  11. $csv[] = array_combine($header, $row);
  12. }
  13. // i tu już mam na czym pracować :) tylko nie wiem jak wybierać te linie gdzie znajdują się te same/identyczne nazwy
trueblue
A nie możesz wrzucać nazwy jako klucz tablicy, a reszty kolumn jako wartości?
Jeśli klucz nie istnieje, to tworzysz element, jeśli istnieje, to kolumny dołączasz.
YourFrog
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"
phpamator
Czegoś się tutaj nie dopatrzyłem chyba, var_dump powinien coś wyrzucić cy to tylko przykład "niedziałający" questionmark.gif smile.gif

YourFrog
Przecież var_dump się wykonuje. Link do sandboxa poniżej.

http://sandbox.onlinephpfunctions.com/code...71375852e5768f3
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.