PHP sortörés probléma (str_getcsv)

PHP sortörés probléma (str_getcsv)
2020-05-08T19:09:45+02:00
2020-05-09T00:46:15+02:00
2022-12-06T10:25:40+01:00
*deleted_09844152
Sziasztok!

A kódom:

$content = file_get_content ( 'http://...' ); // A $content értéke: // Login;Full name;User ID // nasagoddard;NASA Goddard;3808579 // usgs;U.S. Geological Survey (USGS);7859569 // nasalunabotics;Lunabotics Mining Competition;19104497 $arr = str_getcsv ( $content, ';', '', "\n" );

Az $arr tömb:

0 => 'Login', 1 => 'Full name', 2 => 'User ID nasagoddard', 3 => 'NASA Goddard', ...

Amit szeretnék:

0 => 0 => 'Login', 0 => 1 => 'Full name', 0 => 2 => 'User ID', 1 => 0 => 'nasagoddard', 1 => 1 => 'NASA Goddard', ...

A str_getcsv függvény 4. paraméterének eddig ezeket próbáltam meg:

"" "" "" "\n" "\r\n"

Tudna valaki segíteni? A CSV fájl fix, sajnos.
Mutasd a teljes hozzászólást!
A kapott CSV fájl hibás, nem lehetne sortörés egyik mezőben sem. ne csodálkozz ha emiatt elhasal rajt egy szabványkövető függvény. A nem megfelelő formátumú bemeneti fájlt csak saját parser-el tudod úgy ahogy feldolgozni, soronként. Veszel egy sort, szétkapod a pontosvessző mentén, ha megvan a szükséges elemszám, OK. Ha nincs (kevesebb) akkor fogod a következő sort, ugyanez. Ha a kettő kiadja a szükségeset, összevonod. Ha több, akkor hiba, megnézed hogy a jelen esetben második sor elemszáma az eredeti elvárt-e, ha igen, az első sor törött, eldobod. Stb...
Mutasd a teljes hozzászólást!

  • Szerintem nem hibás, csak a str_getcsv nem arra készült hogy átadsz neki egy tömb soros CSV-t és 2 dimenziós tömböt készít belőle, hanem egy sort adsz át és azt feldolgozza. Lejjebb a manualban lehet látni példákat.

    Szerintem próbáld meg az ottani példát:

    $arr = []; $rows = str_getcsv($content, "\n"); foreach($rows as $row) { $arr[] = str_getcsv($row, ";"); } var_dump($arr);
    PHP Sandbox, test PHP online, PHP tester

    Érdemes lenne megnézni, hogy van-e a CSV-ben olyan hely ahol sortörés van az adatban, esetleg pontosvessző, hogy lehessen látni, hogy pontosan mi a szöveghatároló karakter (általában idézőjel szokott lenni) és azt megadni 3. paraméterbe. És ha a szöveghatárolónak nem \ az escape karaktere akkor azt pedig a 4. paraméterbe mehet.
    Mutasd a teljes hozzászólást!
  • Köszönöm, így oldottam meg:

    $content = file_get_content ( 'http://...' ); $bar = explode ( PHP_EOL, $content ); array_shift ( $bar ); array_pop ( $bar ); $foo = array (); foreach ( $bar as $value ) { $baz = explode ( ';', $value ); $foo [] = $baz; }

    Tudom, hogy egy téma egy kérdés, így csak offtopic rovatban kérdeznék valamit, ami már nagyon régóta érdekel:



    Létezik olyan, hogy az explode után egyből megadom a tömb elemének számát?

    Például:

    print explode ( ';', $value ) [ 0 ];
    Mutasd a teljes hozzászólást!
  • Köszönöm, de mire írtál már megszületett a megoldás DJ_Tacee írása alapján.
    Mutasd a teljes hozzászólást!
  • Hali!

    Létezik olyan, hogy az explode után egyből megadom a tömb elemének számát?

    Igen, az 5.4.0-s verzió óta létezik function array dereferencing, azaz bármilyen függvény/metódus által visszaadott tömb elemeit közvetlenül – átmeneti változóba tárolás nélkül – elérheted a híváskor (azaz, az általad leírt módon). De ezt te is nagyon könnyen kipróbálhattad volna.

    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd