Разделенная табуляцией строка PHP в массив

Я использую репозиторий AmazonMwsComplete на GitHub для отправки запросов к Amazon AWS API, в частности к вызову GetReport. Я получаю положительный ответ на мои запросы, так что, кажется, все работает нормально, единственная проблема заключается в том, что он, по-видимому, преобразует XML-ответ в строку с разделителями табуляции, которую я не могу понять, как правильно отформатировать в массив PHP.

По сути, ответ выглядит примерно так:

string(52148) "sku     asin    price   quantity       Business Price Quantity Price Type        Quantity Lower Bound 1 Quantity Price 1       Quantity Lower Bound 2 Quantity Price 2 Quantity Lower Bound 3 Quantity Price 3       Quantity Lower Bound 4 Quantity Price 4 Quantity Lower Bound 5 Quantity Price 5       ProductTaxCode VatExclusivePrice        VatExclusiveBusinessPrice      VatExclusiveQuantityPrice1        VatExclusiveQuantityPrice2     VatExclusiveQuantityPrice3        VatExclusiveQuantityPrice4     VatExclusiveQuantityPrice5
XX-XXXX-XXXX   XXXXXXXXXX     0.01   1
XX-XXXX-XXX   XXXXXXXXXX     0.01    1
XXX-XXX-XXX    XXXXXXXXXX     0.01   1“

Когда я конвертирую это в массив, это выглядит так:

array(22702) {
[0]=>
string(3) "sku"[1]=>
string(4) "asin"[2]=>
string(5) "price"[3]=>
string(8) "quantity"[4]=>
string(14) "Business Price"[5]=>
string(19) "Quantity Price Type"[6]=>
string(22) "Quantity Lower Bound 1"[7]=>
string(16) "Quantity Price 1"[8]=>
string(22) "Quantity Lower Bound 2"[9]=>
string(16) "Quantity Price 2"[10]=>
string(22) "Quantity Lower Bound 3"[11]=>
string(16) "Quantity Price 3"[12]=>
string(22) "Quantity Lower Bound 4"[13]=>
string(16) "Quantity Price 4"[14]=>
string(22) "Quantity Lower Bound 5"[15]=>
string(16) "Quantity Price 5"[16]=>
string(14) "ProductTaxCode"[17]=>
string(17) "VatExclusivePrice"[18]=>
string(25) "VatExclusiveBusinessPrice"[19]=>
string(26) "VatExclusiveQuantityPrice1"[20]=>
string(26) "VatExclusiveQuantityPrice2"[21]=>
string(26) "VatExclusiveQuantityPrice3"[22]=>
string(26) "VatExclusiveQuantityPrice4"[23]=>
string(40) "VatExclusiveQuantityPrice5
XX-XXXX-XXXX"[24]=>
string(10) "XXXXXXXXX"[25]=>
string(5) "0.01"[26]=>
string(1) "1"[27]=>
string(0) ""[28]=>
string(0) ""[29]=>
string(0) ""[30]=>
string(0) ""}

Есть несколько проблем с этим, заголовок «VatExclusiveQuantityPrice5» смешивается с первым фрагментом информации, который является SKU продукта, поэтому он находится в том же элементе в массиве.

Строка с разделителями табуляции также использует 20 табуляций как разрыв «новой строки», поэтому я получаю 20 пустых элементов в массиве перед следующей информацией.

У меня есть одно возможное решение, которое заключается в преобразовании его в текстовый файл и импорте прямо в базу данных, но, безусловно, должен быть простой способ преобразовать это в массив PHP, вариант с базой данных кажется гораздо более сложным способом обрабатывать эту информацию.

0

Решение

$myArray = [];
$lines = explode(PHP_EOL, $myText);
$l = 0;
foreach($lines as $line) {
$myArray[$l] = explode("\t", $line);
$l++;
}

PHP_EOL: один из разделителей новой строки, «\ n», «\ r» или «\ n \ r»

«\ t»: символ табуляции с двойными кавычками, поэтому PHP может интерпретировать его как специальный символ, а не просто строку \ t

Первая строка будет вашим заголовком, следующая — содержимым таблицы.

2

Другие решения

PHP имеет простой explode() функция, которая делает именно это: берет строку, разделяет ее по указанному разделителю и возвращает массив.

http://php.net/manual/en/function.explode.php

Вам может понадобиться настроить параметр разделителя или заменить символы в строке, чтобы сделать один разделитель, или не добавлять его вообще, если это просто простая вкладка.

0

По вопросам рекламы [email protected]