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

194
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 с авторизацией

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

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

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

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

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

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

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

163