Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Szukam _ Import kontaktów do SQLa

Napisany przez: DNMX 19.01.2022, 10:44:47

Nadal męczę temat z poprzednich wątków. Tym razem próbuję zaciągnąć kontakty z .csv wygenerowanego w Gmailu. Googlowałem rzecz jasna, znalazłem kilka prostych gotowcy jakobrabiać CSV-ki w PHP ale wszystkie się gubią jak np, w informacjach o kontakcie jest kilka linijek bo wszystkie traktują plik jako podzielony \n na rowy. Tymczasem szukam rozwiązania któ?e poprawnie zinterpretuje taki kod:

Kod
pierwsza,linijka,"trzecie pole",
drug,linijka,"wielowierszowy
komentarz
z kilkoma
ENTERami"
"tu dopiero",trzecia,linijka

Ktoś? coś?

Napisany przez: trueblue 19.01.2022, 11:03:22

Używałeś: https://www.php.net/manual/en/function.fgetcsv.php ?

Napisany przez: DNMX 19.01.2022, 11:46:15

Działa tylko że zwraca dane w postaci $data[0], $data[54] a nie $data[name], $data[street]. Niby nie duży problem ale mogłoby traktować pierwszą linjkę jako nagłówki. W dodatku trzeba uważać, żeby pierwszego wiersza przypadkowo nie potraktować jako dane. W drugim przykładzie w linku który podałeś jest opisane jak zrobić z headerami ale to znowu się wykrzacza w przypadku wielowierszowych pól.

Napisany przez: trueblue 19.01.2022, 12:11:00

Który przykład masz na myśli? Podaj link.

Napisany przez: DNMX 19.01.2022, 13:50:11

Cytat(Gandalf the White)
Forget this while() loop mumbo jumbo! Use this:

Kod
$rows = array_map('str_getcsv', file('myfile.csv'));
$header = array_shift($rows);
$csv = array();
foreach ($rows as $row) {
  $csv[] = array_combine($header, $row);
}

Source: https://steindom.com/articles/shortest-php-code-convert-csv-associative-array

Napisany przez: trueblue 19.01.2022, 15:48:46

  1. $rows = [];
  2. if (($handle = http://www.php.net/fopen("myfile.csv", "r")) !== FALSE) {
  3. while (($row = http://www.php.net/fgetcsv($handle, 1000, ",")) !== FALSE) {
  4. $rows[] = $row;
  5. }
  6. http://www.php.net/fclose($handle);
  7. }
  8.  
  9. $header = http://www.php.net/array_shift($rows);
  10. $csv = [];
  11. foreach ($rows as $row) {
  12. $csv[] = array_combine($header, $row);
  13. }


Kod
c1,c2,c3 <- nazwy kolumn
pierwsza,linijka,"trzecie pole" <- tu bez przecinka
drug,linijka,"wielowierszowy
komentarz
z kilkoma
ENTERami"
"tu dopiero",trzecia,linijka

Napisany przez: DNMX 19.01.2022, 22:00:50

Piękny fragment kodu, dzięki!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)