skip to Main Content

I’m attempting to create several arrays from a text document.

The text document is formatted as

"1","July 1999"," 2,782,546 "," $17.38 "," $338,545.98 "," 3,004 ",""

"2","August 1999"," 2,739,441 "," $18.68 "," $153,343.98 "," 3,023 ",""

"3","September 1999"," 2,650,431 "," $20.86 "," $308,929.17 "," 3,042 ",""

I need to create several arrays, that combine the date with another field such as:

$Array1 = array("July 1999"=> " 2,782,546 ", "August 1999"=> " 2,739,441 ", "September 1999"=> "2,650,431 ");

$Array2 = array("July 1999"=> " $17.38 ", "August 1999"=> " $18.68 ", "September 1999"=> "$20.86 ");

I can’t figure out how to correctly parse the strings to accurately create the arrays.

2

Answers


  1. Chosen as BEST ANSWER

    I was able to parse out the data I needed with this code.

    $row = 1;
    if (($handle = fopen("file.txt", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            $row++;
            for ($c = 1; $c < 2; $c++) {
                for ($d = 2; $d<3;$d++){ 
                    echo $data[$c] . " " . $data[$d] . "<br />n" ;
                }
            }
        }
    }
    fclose($handle);
    

  2. It’s not clear how much flexibility you need (whether the dates / volume of data is dynamic), but you effectively need to parse the csv file lines and transpose the data.

    (I’d use fopen() and fgetcsv() as you did, but I could not in the sandbox.)

    Code: (Demo)

    $csv = <<<TXT
    "1","July 1999"," 2,782,546 "," $17.38 "," $338,545.98 "," 3,004 ",""
    
    "2","August 1999"," 2,739,441 "," $18.68 "," $153,343.98 "," 3,023 ",""
    
    "3","September 1999"," 2,650,431 "," $20.86 "," $308,929.17 "," 3,042 ",""
    TXT;
    
    $data = [];
    // extract the csv data
    foreach (
        array_map('str_getcsv', explode("nn", $csv))
        as
        $row
    ) {
        $data[$row[1]] = array_slice($row, 2, -1);
    }
    
    $result = [];
    // transpose and trim
    foreach ($data as $k => $row) {
        foreach ($row as $i => $v) {
            $result[$i][$k] = trim($v);
        }
    }
    var_export($result);
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search