Как преобразовать tsv ответ яндекс директ api в массив?

199
21 марта 2018, 06:16

Собственно вопрос такой. Получаю отчет яндекс директа

"a259784,259785 (2017-03-19 - 2018-03-19)"
AdGroupName Impressions Clicks  Cost
Группа 2952489 10905034    939944  575118050000
Группа 2952490 10976444    944645  576994320000
Группа 2952491 10926208    947145  580294830000
Группа 2952492 10851243    945256  574691690000
Группа 2952493 10844346    946921  578424030000
Total rows: 5

Как мне его в массив преобразовать? Чтобы значения соответствовали ключам ?

'AdGroupName' => 'Группа №2952489' , Impressions    => '10905034',  ........
Answer 1

предположим, что tsv это tab separated values и разделитель табуляция

Исходные

$txt =<<<TEXT
"a259784,259785 (2017-03-19 - 2018-03-19)"
AdGroupName Impressions Clicks  Cost
Группа 2952489 10905034    939944  575118050000
Группа 2952490 10976444    944645  576994320000
Группа 2952491 10926208    947145  580294830000
Группа 2952492 10851243    945256  574691690000
Группа 2952493 10844346    946921  578424030000
Total rows: 5
TEXT;

разделим на строки

$data = explode("\n", $txt);

Уберем первую и последнюю

array_shift($data);
array_pop($data);

первая строка = ключи, делим по табу

$keys = explode("\t", array_shift($data));

остальное тоже по табу и сливаем с ключами

$result = array_map(function($v) use ($keys){.
                return array_combine($keys, explode("\t", $v));
            }, $data);
print_r($result);
Answer 2

Чуть-чуть доработал ответ teran:

$str = preg_replace("/Total rows:(.*)/", "", $str);  
$str =  explode("\n", $str) ;
unset($str[0]);
unset($str[1]);
foreach($str as $line){
  if(!empty($line)){
    list($gn, $imp, $cl, $coast) = explode("\t", $line);
    $linearray = array(
        "AdGroupName" => $gn,
        "Imp" => $imp,
        "clicks" => $cl,
        "coast" => $coast,
    );
  print_R($linearray);
  }
};
READ ALSO
exec curl put с авторизацией

exec curl put с авторизацией

Выполняю запрос:

198
Как узнать ключ элемента в многомерном массиве?

Как узнать ключ элемента в многомерном массиве?

Есть многомерный массив, который надо изменить в соответсвии с ключом, но никак не могу сделать так чтобы выводился ключ вот массив:

165
Узнать какой input text был заполнен

Узнать какой input text был заполнен

Есть большое количество input ов, которые нужно отправить если совпадает name с data-id сабмитаВот submit и inputы :

168