【问题标题】:PHP - Unable to parse CSV String into arrayPHP - 无法将 CSV 字符串解析为数组
【发布时间】:2015-03-27 09:34:46
【问题描述】:

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

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

座席、已接听、未接听、贡献、每小时、总响铃时间、平均响铃时间、总通话时间、平均通话时间、总结束时间、平均结束时间、总会话时间、平均会话时间、会话数、 % Util,Agent Hang-Ups,Caller Hang-Ups,Agent Hang-Ups Percent,Caller Hang-Ups Percent Amber,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% 阿米,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% 安德鲁 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% 凯瑟琳, 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%大卫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% 詹姆斯,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% 朱迪,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% 乔希,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% 李,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% 本地/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@callback-agent,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% 本地/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% 本地/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% 本地/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% 本地/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% 麦迪,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%梅尔,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% 维克,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 中的外观

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

$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

【问题讨论】:

  • 请贴出您尝试过的代码。
  • 你试过使用函数fgetcsv()吗?
  • @machineaddict 如果您愿意花时间真正阅读整个内容,您会发现有足够的代码用于此示例:)
  • 只有$test = explode(",", $csvString); 你打印出来了。我指的是您尝试过的实际代码。尝试将一个数组转换为另一个数组。并像 marian0 指出的那样使用fgetcsv 函数。
  • @machineaddict 剩下的代码并不真正相关。我上面确实有一些 curl 可以访问该文件。文件内容保存为变量中的单个字符串。我还更新了我的问题,显示了当我尝试直接访问文件而不是作为字符串变量时会发生什么。

标签: php arrays parsing csv


【解决方案1】:

你没有做你引用的例子中显示的事情。在该示例中,读取文件,首先在 EOL 上展开以获取单独的行,然后在“,”上单独展开每行以获取多维数组...该代码有什么问题?

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

【讨论】:

  • 对不起,我包含了错误的链接,但无论如何我已经尝试以与链接中提供的答案相同的方式进行操作,但由于某种原因,这实际上在解析数据时遇到了一些麻烦
  • 做你引用的例子并不难。获取文件,在 EOL 上展开,迭代行,展开每一行,解析每一行。请执行此代码,然后我可以提供帮助。
  • 好的可以关闭我一直有一个错字,不是指它应该是什么......而不是最后提到变量我指向一个方法......跨度>
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 1970-01-01
相关资源
最近更新 更多