2017-02-22 19 views
0

У меня есть CSV текст, как нижеCSV строку в массив в PHP

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 

и в этом; разделитель разделяет мои данные. и самой первой строкой был мой заголовок 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)); 
} 

поэтому его не давая мне желаемый результат. любые предложения, пожалуйста,

+0

Не можете скачать файл данных в другом формате? Как JSON или так? – pinoyCoder

+0

Фактически это происходит от внешнего URL-адреса api. @pinoyCoder – 06011991

ответ

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); 
    } 
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, вы забыли установить правильный delemiter. По умолчанию «,» и вам нужно «;».

+0

Да, я забыл. Ты прав . – 06011991

+0

Но массив не подходит моему желанию. какие-либо предложения ? – 06011991

+0

Я немного изменил свой ответ. – Oliver