从PHP中的SEMRush API解析数据[以分号分隔]

时间:2018-06-07 23:22:01

标签: php arrays csv parsing

我执行Semrush API调用并获得以下服务器响应:

Database;Domain;Rank;Organic Keywords;Organic Traffic;Organic Cost;Adwords Keywords;Adwords Traffic;Adwords Cost;PLA uniques;PLA keywords 
us;seobook.com;98072;14085;14300;62233;0;0;0;0;0

这些实际上是2行,其中值彼此对应。例如:

Database = us,Domain = seobook.com,Rank = 98072

等等..我需要将这些值解析为变量。

我真正需要的是:Domain, Organic Traffic, Organic Cost

所以我想将他们的价值存储到$domain$traffic$cost

我如何在PHP中执行此操作?

请帮助任何人。 提前致谢

1 个答案:

答案 0 :(得分:0)

这是一种称为CSV(字符分隔值)的格式。它通常用于大型记录列表。 PHP有一个函数fgetcsv()来读取这种格式(来自文件资源)。

$csv = <<<'CSV'
Database;Domain;Rank;Organic Keywords;Organic Traffic;Organic Cost;Adwords Keywords;Adwords Traffic;Adwords Cost;PLA uniques;PLA keywords 
us;seobook.com;98072;14085;14300;62233;0;0;0;0;0
CSV;
$stream = fopen('data://text/plain;base64,'.base64_encode($csv), 'rb');

$columns = NULL;
$values = [];
// read a line from the stream
while ($line = fgetcsv($stream, 0, ';')) {
  if (NULL === $columns) {
    // first line is columns, store it
    $columns = $line;
    // and continue with the next line
    continue;
  }
  // any other line combine the columns with the values and store
  $values[] = array_combine($columns, $line);
}

var_dump($values);

输出:

array(1) {
  [0]=>
  array(11) {
    ["Database"]=>
    string(2) "us"
    ["Domain"]=>
    string(11) "seobook.com"
    ["Rank"]=>
    string(5) "98072"
    ["Organic Keywords"]=>
    string(5) "14085"
    ["Organic Traffic"]=>
    string(5) "14300"
    ["Organic Cost"]=>
    string(5) "62233"
    ["Adwords Keywords"]=>
    string(1) "0"
    ["Adwords Traffic"]=>
    string(1) "0"
    ["Adwords Cost"]=>
    string(1) "0"
    ["PLA uniques"]=>
    string(1) "0"
    ["PLA keywords "]=>
    string(1) "0"
  }
}

提示:此示例使用数据URL将CSV字符串作为文件资源进行访问。在不需要的实际实现中,API应该提供文件资源/流。