Php csv标题行作为数组键

Php csv标题行作为数组键,php,arrays,csv,curl,Php,Arrays,Csv,Curl,我可以将文件放入数组中,但我希望将密钥设置为第一行。下面是curl命令: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://url.com/download"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_CUSTOMREQUEST,

我可以将文件放入数组中,但我希望将密钥设置为第一行。下面是curl命令:

 $ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://url.com/download");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");


$headers = array();
$headers[] = "Content-Type: application/json";
$headers[] = "X-App-Key: xxxxx";
$headers[] = "X-User-Key: yyyy";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close ($ch);


$data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $result));

return $data;
以下是返回的csv:

"Date,Campaign,Campaign Id,Impressions,Clicks,CTR,Platform Cost,Search Cost,Demographic Cost,Contextual Cost,Behavioral Cost,Geographic Cost,Segment Cost,Media Cost,CPM,Total Spend,ECPC,Click Sales,Click Leads,Click Signups,Click Other,View Sales,View Leads,View Signups,View Other,CPA,Weighted Actions 2017-05-16,Company,326606,,,,,,,,,,,,,,,0,0,0,0,0,0,0,2,,2.00 2017-05-18,Company,326606,,,,,,,,,,,,,,,0,0,0,0,0,0,0,2,,2.00 2017-05-19,Company,326606,,,,,,,,,,,,,,,0,0,0,0,0,0,0,2,,2.00 2017-05-20,Company,326606,,,,,,,,,,,,,,,0,0,0,0,0,0,0,2,,2.00 2017-05-28,Company,326606,,,,,,,,,,,,,,,0,0,0,0,0,0,0,1,,1.00 2017-06-02,Company,326606,,,,,,,,,,,,,,,0,0,0,0,0,0,0,1,,1.00 2017-05-10,Company,326606,16877,41,0.002429,0.770373,0.000000,0.0,0.000000,0.0,0.770373,0.000000,1.540785,3.081682,52.009548,1.268526,,,,,,,,,, 2017-05-11,Company,326606,17001,50,0.002941,0.764775,0.000000,0.0,0.000000,0.0,0.764775,0.000000,1.529592,3.059288,52.010956,1.040219,,,,,,,,,, 2017-05-12,Company,326606,16814,44,0.002617,0.773364,0.000000,0.0,0.000000,0.0,0.773364,0.000000,1.546763,3.093651,52.016652,1.182197,,,,,,,,,, 2017-05-13,Company,326606,16880,32,0.001896,0.770245,0.000000,0.0,0.000000,0.0,0.770245,0.000000,1.540520,3.081195,52.010570,1.625330,,,,,,,,,, 2017-05-14,Company,326606,17045,32,0.001877,0.762742,0.000000,0.0,0.000000,0.0,0.762742,0.000000,1.525543,3.051212,52.007907,1.625247,0,0,0,0,0,0,0,1,52.0079,1.00 2017-05-15,Company,326606,7294,10,0.001371,0.781126,0.000000,0.0,0.000000,0.0,0.781126,0.000000,1.562252,3.124683,22.791441,2.279144,,,,,,,,,, 2017-06-03,Company,559435,30186,42,0.001391,0.690422,0.690422,0.0,0.000000,0.0,0.000000,0.000000,1.380910,2.761773,83.366884,1.984926,0,0,0,1,0,0,0,1,41.6834,2.00 2017-06-04,Company,559435,29952,25,0.000835,0.695962,0.695962,0.0,0.000000,0.0,0.000000,0.000000,1.391983,2.783917,83.383894,3.335356,0,0,0,0,0,0,0,12,6.9487,12.00 2017-06-05,Company,559435,29863,39,0.001306,0.697854,0.697854,0.0,0.000000,0.0,0.000000,0.000000,1.395772,2.791494,83.362371,2.137497,0,0,0,4,2,1,0,15,3.7892,22.00 2017-06-06,Company,559435,29859,40,0.001340,0.698055,0.698055,0.0,0.000000,0.0,0.000000,0.000000,1.396160,2.792283,83.374777,2.084369,0,1,0,4,2,1,0,21,2.8750,29.00 2017-06-07,Company,559435,29968,22,0.000734,0.695653,0.695653,0.0,0.000000,0.0,0.000000,0.000000,1.391359,2.782683,83.391458,3.790521,0,0,0,1,0,0,0,25,3.2074,26.00 2017-06-08,Company,559435,29967,41,0.001368,0.695284,0.695284,0.0,0.000000,0.0,0.000000,0.000000,1.390634,2.781195,83.344075,2.032782,0,0,0,2,1,0,0,23,3.2055,26.00 2017-06-09,Company,559435,14689,8,0.000545,0.686755,0.686755,0.0,0.000000,0.0,0.000000,0.000000,1.373565,2.747041,40.351291,5.043911,0,0,0,0,0,2,0,21,1.7544,23.00 ,,,286395,426,0.001487,0.718754,0.471867,0.0,0.000000,0.0,0.246886,0.000000,1.437560,2.875126,823.421824,1.932915,0,1,0,12,5,4,0,129,5.4531,151.00 
返回的数组是,但我希望“date”“clicks”用作键,这样我就可以简单地调用“$data[Click Lead]”:

使用并扩展代码以:

$data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $result));

$new_data = [];

// shift first element of $data, we will use it as keys.
$keys = array_shift($data);
foreach ($data as $item) {
    // create key => value array
    $new_data[] = array_combine($keys, $item);
}
感谢@Kazz-如果出现以下警告:

数组_combine():两个参数的元素数应相等


您需要检查两个元素是否都是数组,并且它们的大小是否相等(例如,使用
count()

您需要迭代并创建数组的副本,将第一次迭代的值添加为键。到目前为止,您尝试了什么?难道您不能只执行
$data=json\u解码($result,true)?我很确定有一个单行解决方案,但如果您删除多余的curl连接以获取csv(您知道,这与您的问题无关),并提供csv的前几行以用于返回潜在的解决方案,那么这将是最简单的。或者正如@alon eitan让我意识到的那样,提供一个json示例也可以。@AlonEitan当我进行json_解码时,我得到了“NULL”,这是我第一次尝试。@webjujuju。我添加了CSV,我保留了curl,因为它是我用来创建数组的。我已经很久没有编码了,所以所有的帮助都一如既往。谢谢,乍一看我得到了:array_combine():两个参数的元素数应该相等。@Dan因为csv中的最后一行:
[21]=>array(1){[0]=>NULL}
$data = array_map("str_getcsv", preg_split('/\r*\n+|\r+/', $result));

$new_data = [];

// shift first element of $data, we will use it as keys.
$keys = array_shift($data);
foreach ($data as $item) {
    // create key => value array
    $new_data[] = array_combine($keys, $item);
}