PHP - 无法将CSV字符串解析为数组

时间:2015-01-28 13:04:38

标签: php arrays parsing csv

我无法将CSV String解析为多维数组。我已经看到了这个问题PHP CSV string to array但是我没有得到相同的结果..

在屏幕上打印时,CSV如下所示:

  

代理,已回答,未接,贡献,每小时,总振铃时间,平均振铃时间,总通话时间,平均通话时间,总回放时间,平均回绕时间,总会话时间,平均会话时间,会话数, %Util,代理挂起,来电挂起,代理挂起百分比,来电挂起百分比琥珀色,16,0,2.0%,0.2,28.6,1.8,1861.1,116.3,0.0,0.0,234862.2,3403.8 ,69.0,0.8%,10,6,62.5%,37.5%Amie,106,0,13.5%,3.0,721.7,6.8,12268.0,115.7,0.0,0.0,127011.0,6350.5,20.0,9.7%,54,52 ,50.9%,49.1%Andrew S,4,0,0.5%,0.1,0.0,0.0,1495.6,373.9,46.9,11.7,216218.4,3793.3,57.0,0.7%,2,2,50.0%,50.0%Catherine, 28,0,3.6%,0.7,55.3,2.0,3089.4,110.3,0.0,0.0,135318.2,1409.6,96.0,2.3%,14,14,50.0%,50.0%David S,63,0,8.0%,2.0 ,393.0,6.2,6429.6,102.1,0.0,0.0,113765.5,16252.2,7.0,5.7%,20,43,31.7%,68.3%James,10,0,1.3%,0.1,3.4,0.3,1796.5,179.7, 0.0,0.0,258600.0,3747.8,69.0,0.7%,2,8,20.0%,80.0%Jo,20,0,2.5%,0.2,120.0,6.0,3753.3,187.7,0.0,0.0,454249.4,7699.1,59.0 ,0.8%,9,11,45.0%,55.0%Jodie,37,0,4.7%,0.7,39.9,1.1,3570.5,96.5,0.0,0.0,204273.4 ,3462.3,59.0,1.7%,21,16,56.8%,43.2%乔,16,0,2.0%,0.3,15.2,1.0,1847.0,115.4,0.0,0.0,219218.5,4059.6,54.0,0.8%,3 ,13,18.8%,81.3%Josh,11,0,1.4%,0.2,9.7,0.9,1892.3,172.0,0.0,0.0,209009.6,2714.4,77.0,0.9%,2,9,18.2%,81.8%LINE ,11,0,1.4%,0.0,0.0,0.0,0.1,0.0,0.0,0.0,0.0,0.0,0.0,0.0%,11,0,100.0%,0.0%Lee,67,0,8.5%,1.1,277.4 ,4.1,18616.5,277.9,44091.7,658.1,223320.1,5726.2,39.0,8.3%,45,22,67.2%,32.8%Local / 5201 @ callback-agent,108,91,13.7%,0.3,672.7,3.4, 11262.9,104.3,0.0,0.0,1209599.0,1209599.0,1.0,0.9%,35,73,32.4%,67.6%本地/ 5294 @回调代理,21,7,2.7%,0.1,161.7,5.8,1290.6,61.5 ,0.0,0.0,1209599.0,1209599.0,1.0,0.1%,11,10,52.4%,47.6%Local / 5309 @ callback-agent,24,0,3.1%,0.1,0.0,0.0,4452.1,185.5,0.0, 0.0,1209599.0,1209599.0,1.0,0.4%,8,16,33.3%,66.7%Local / 5400 @ callback-agent,23,16,2.9%,1.5,208.8,5,4,997.3,43.4,0.0,0.0,54625.7 ,13656.4,4.0,1.8%,8,15,34.8%,65.2%Local / 5402 @ callback-agent,12,0,1.5%,22.0,107.4,8.9,555.7,46.3,0.0,0.0,1960.0,1960.0, 1.0,28.4%,5,7,41.7%,58.3%Local / 5415 @ callback-agent,5,1, 0.6%,0.0,76.6,12.8,221.2,44.2,0.0,0.0,0.0,0.0,0.0,0.0%,1,4,20.0%,80.0%Maddie,38,0,4.8%,0.6,91.0,2.4, 5743.0,151.1,0.0,0.0,212379.5,2469.5,86.0,2.7%,9,29,23.7%,76.3%Mel,9,0,1.1%,0.2,4.4,0.5,1340.5,148.9,0.0,0.0,197666.8 ,3137.6,63.0,0.7%,4,5,44.4%,55.6%Paul M,56,0,7.1%,0.1,241.0,4.3,15575.1,278.1,0.0,0.0,3982747.0,3982747.0,1.0,0.4%, 34,22,60.7%,39.3%Shane,13,0,1.7%,0.2,10.9,0.8,2244.3,172.6,0.0,0.0,214092.8,3398.3,63.0,1.0%,0,13,0.0%,100.0% Tony C,7,0,0.9%,0.1,36.2,5.2,1052.8,150.4,0.0,0.0,179391.7,1812.0,99.0,0.6%,3,4,42.9%,57.1%Vanessa,11,0,1.4% ,0.0,56.3,5.1,608.8,55.3,0.0,0.0,1209599.0,1209599.0,1.0,0.1%,5,6,45.5%,54.5%Vic,70,0,8.9%,0.0,486.2,6.9,9044.4, 129.2,0.0,0.0,0.0,0.0,0.0,0.0%,27,43,38.6%,61.4%"

这几乎就像一个班轮。但是,当我将此数据导出到文件并使用Excel打开时,数据格式很好。

它在Excel中的外观 enter image description here

然而,在我将它发送到文件之前,我需要操作它并且为此我想将其更改为数组。但是什么时候做:

$test = explode(",", $csvString);
echo '<pre>'; print_r($test); echo '</pre>';

我得到的并不完全是我想要的。我想得到多维数组,但我得到的是一个单个数组,它只是在两者之间命名。

输出旧方法:

Array
(
    [0] => Agent
    [1] => Answered
    [2] => Missed
    [3] => Contribution
    [4] => Per Hour
    [5] => Total Ring Time
    [6] => Mean Ring Time
    [7] => Total Talk Time
    [8] => Mean Talk Time
    [9] => Total Wrap Time
    [10] => Mean Wrap Time
    [11] => Total Session Time
    [12] => Mean Session Time
    [13] => Number of Sessions
    [14] => % Util
    [15] => Agent Hang-Ups
    [16] => Caller Hang-Ups
    [17] => Agent Hang-Ups Percent
    [18] => Caller Hang-Ups Percent
Amber
    [19] => 16
    [20] => 0
    [21] => 2.0%
    [22] => 0.2
    [23] => 28.6
    [24] => 1.8
    [25] => 1861.1
    [26] => 116.3
    [27] => 0.0
    [28] => 0.0
    [29] => 234862.2
    [30] => 3403.8
    [31] => 69.0
    [32] => 0.8%
    [33] => 10
    [34] => 6
    [35] => 62.5%
    [36] => 37.5%

输出第二种方法:

    // Curls stuff above, to access the file 
    // Curl accesses the correct path to the url and save is in a variable.
    // Session at this point is still open 

    $csvData = file_get_contents($url);
    $lines = explode(PHP_EOL, $csvData);
    $array = array();
    foreach ($lines as $line) {
        $array[] = str_getcsv($line);
    }
    var_dump($array);

    echo '<pre>'; print_r($array); echo '</pre>';

使用上述方法输出

    var_dump
    array(1) { [0]=> array(1) { [0]=> string(3) "" } }

    echo
    Array
    (
        [0] => Array
            (
                [0] => 
            )
     )

修改 最后,在移动代码并仔细检查所有内容之后,事实证明,而不是指向变量,我指的是方法......

预期输出

Array
(    
    [0] => Agent 
    (
        [0] => Answered
        [1] => Missed
        [2] => Contribution
        [3] => Per Hour
        [4] => Total Ring Time
        [5] => Mean Ring Time
        [6] => Total Talk Time
        [7] => Mean Talk Time
        [8] => Total Wrap Time
        [9] => Mean Wrap Time
        [10] => Total Session Time
        [11] => Mean Session Time
        [12] => Number of Sessions
        [13] => % Util
        [14] => Agent Hang-Ups
        [15] => Caller Hang-Ups
        [16] => Agent Hang-Ups Percent
        [17] => Caller Hang-Ups Percent
    )
    [1] => Amber 
    (
        [0] => 16
        [1] => 0
        [2] => 2.0%
        [3] => 0.2
        [4] => 28.6
        [5] => 1.8
        [6] => 1861.1
        [7] => 116.3
        [8] => 0.0
        [9] => 0.0
        [10] => 234862.2
        [11] => 3403.8
        [12] => 69.0
        [13] => 0.8%
        [14] => 10
        [15] => 6
        [16] => 62.5%
        [17] => 37.5%
    )
    .... ETC

1 个答案:

答案 0 :(得分:1)

你没有做你所引用的例子中显示的内容。在该示例中,文件被读取,首先在EOL上展开以获得单独的行,然后每行在','上单独展开以获得多维数组...该代码中的错误是什么?

只是爆炸','解析CSV文件中的字段是完全错误的。这有很多细微差别。例如逗号可以嵌入字段中。