csv字符串到php中的数组

时间:2017-02-22 09:48:08

标签: php arrays csv

我有csv文本,如下所示

Keyword;Search Volume;CPC;Competition;Number of Results;Trends
shoes of ladies;90;0.00;0.00;96700000;0.11,0.11,0.11,0.22,0.11,0.11,1.00,0.11,0.11,0.11,0.11,0.11
ladys shoes;110;0.95;1.00;96800000;0.79,0.64,0.50,0.79,1.00,0.79,0.79,0.79,0.64,0.50,0.64,1.00
kadies shoes;90;1.16;1.00;116000000;0.44,1.00,1.00,0.11,1.00,0.78,0.56,0.11,0.56,0.33,0.33,1.00
shoes ladies;390;1.20;1.00;119000000;0.54,0.54,0.54,0.81,1.00,1.00,0.81,0.67,1.00,0.67,0.67,0.81
shoes for ladies;140;1.38;1.00;132000000;0.42,0.27,0.35,0.42,0.54,0.65,0.42,0.27,0.42,0.81,0.65,1.00
laddies shoes;90;2.23;1.00;76800000;0.22,0.33,0.11,0.44,0.11,0.78,0.33,0.22,0.78,0.11,0.11,1.00
ladies shoe;90;1.50;1.00;52400000;0.45,0.64,0.82,0.82,1.00,1.00,1.00,1.00,0.82,0.64,0.82,0.82
ladies shoes uk;2900;1.19;1.00;34700000;0.43,0.66,0.82,0.82,0.82,1.00,0.66,0.66,0.55,0.55,0.66,0.66
ladies black shoes;590;1.31;1.00;63600000;0.67,0.67,0.67,0.82,0.67,0.82,0.67,0.82,0.67,0.82,0.82,1.00
black ladies shoes;320;1.34;1.00;131000000;0.67,0.67,0.67,0.67,0.67,0.82,0.67,0.67,0.82,0.82,1.00,1.00

并在此; deliminator分隔我的数据。第一行是我的标题Keyword;Search Volume;CPC;Competition;Number of Results;Trends所以共有6个标题。

我正在尝试获取如下所示的数组

array(12) {
  [0]=>
  array(6) {
    ["Keyword"]=>"shoes of ladies"
    ["Search Volume"]=>"90"
    ["CPC"]=> "0.00"
    ["Competition"]=> "0.11"
    ["Number of Results"]=> "96700000"
    ["Trends"]=>
        array(){
        [0]=>0.11,
        [1]=>0.11,
        [2]=>0.11
        ...
        []
        }

  [1]=>
  array(6) {
    ["Keyword"]=>"ladys shoes"
    ["Search Volume"]=>"90"
    ["CPC"]=> "0.00"
    ["Competition"]=> "0.11"
    ["Number of Results"]=> "96700000"
    ["Trends"]=>
        array(){
        [0]=>0.11,
        [1]=>0.11,
        [2]=>0.11
        ...
        []
        }
  }

我正在尝试使用代码

$url = "Keyword;Search Volume;CPC;Competition;Number of Results;Trends
shoes of ladies;90;0.00;0.00;96700000;0.11,0.11,0.11,0.22,0.11,0.11,1.00,0.11,0.11,0.11,0.11,0.11
ladys shoes;110;0.95;1.00;96800000;0.79,0.64,0.50,0.79,1.00,0.79,0.79,0.79,0.64,0.50,0.64,1.00
kadies shoes;90;1.16;1.00;116000000;0.44,1.00,1.00,0.11,1.00,0.78,0.56,0.11,0.56,0.33,0.33,1.00
shoes ladies;390;1.20;1.00;119000000;0.54,0.54,0.54,0.81,1.00,1.00,0.81,0.67,1.00,0.67,0.67,0.81
shoes for ladies;140;1.38;1.00;132000000;0.42,0.27,0.35,0.42,0.54,0.65,0.42,0.27,0.42,0.81,0.65,1.00
laddies shoes;90;2.23;1.00;76800000;0.22,0.33,0.11,0.44,0.11,0.78,0.33,0.22,0.78,0.11,0.11,1.00
ladies shoe;90;1.50;1.00;52400000;0.45,0.64,0.82,0.82,1.00,1.00,1.00,1.00,0.82,0.64,0.82,0.82
ladies shoes uk;2900;1.19;1.00;34700000;0.43,0.66,0.82,0.82,0.82,1.00,0.66,0.66,0.55,0.55,0.66,0.66
ladies black shoes;590;1.31;1.00;63600000;0.67,0.67,0.67,0.82,0.67,0.82,0.67,0.82,0.67,0.82,0.82,1.00
black ladies shoes;320;1.34;1.00;131000000;0.67,0.67,0.67,0.67,0.67,0.82,0.67,0.67,0.82,0.82,1.00,1.00" ;


$lines = explode("\n", $url);

$head = str_getcsv(array_shift($lines));

$data = array();
foreach ($lines as $line) {
$data[] = array_combine($head, str_getcsv($line));
}

所以它没有给我想要的输出。任何建议请

2 个答案:

答案 0 :(得分:2)

这应该适合你:

$head = str_getcsv(array_shift($lines), ";");
$data = array();
foreach ($lines as $line) {
   $tmp = array_combine($head, str_getcsv($line, ";"));
   $tmp['Trends'] = explode(",", $tmp['Trends'])
   $data[] = $tmp;
}

这是解释: 如此处http://php.net/manual/en/function.str-getcsv.php所述,您忘记设置正确的删除者。这是默认情况下','你需要&#39 ;;'。

答案 1 :(得分:1)

试试这个:

    $lines = explode("\n", $url);

    $head = str_getcsv(array_shift($lines),";");

    $data = array();
    foreach ($lines as $line) {
        $tempArr = str_getcsv($line,";");
        $tempArr[5] = explode(",",$tempArr[5]);
        $data[] = array_combine($head, $tempArr);
    }