在 php 数组上转换 mws 结果 .csv

Convert mws result .csv on php array

我在 mws amazon api 工作,所以我通过该请求从 ReportsApi 获得了数据 _GET_MERCHANT_LISTINGS_DATA_LITE_。

            $request = new MarketplaceWebService_Model_GetReportRequest($parameters);
    //Envoyer la demande GetReport et recuperer le requested report
    $getReportCont = self::invokeGetReport($service, $request);

    // Ouvrez le fichier et enregistrez les données de l'annonce
    $outDir = sprintf('%s\%s', $outBaseDir, date('Y'));
    if (!is_dir($outDir)) {
        if (!mkdir($outDir, 0777, true)) {
            die('Failed to create output Directory [makdir]...');
        }
    }
    //Creer nom de fichier
    $filename = sprintf('%s\Report_%s_%s.csv', $outDir, date('Ymd'), date('His'));
    $fp = fopen( $filename , 'w');
    //Ecrire dans le fichier les donnees de requested report
    fwrite($fp, $getReportCont);
    fclose($fp);

问题是数据没有结构化。所以 我保存在 file.csv

sku-vendeur quantit�    prix    id-produit
10000   3   51,95   B00E3LV204
10002   3   85,96   B00PE9ZC1E
100024  3   345,73  B01LWMZ33O
100031  3   88,22   B018NOSAZ6

从这里我尝试在 php 中获取结构化数组。

我尝试了很多方法:

 $csv = explode("\n", file_get_contents('test.csv'));

 foreach ($csv as $key => $line)
 {
    $csv[$key] = str_getcsv($line);
 }

获取这样的数组:

数组

{

[0] =>Array

{
    'sku-vendeur'=>"10000",
    'quantity'   =>"3",
    'prix' => "51,95",
    'id-produit'=>"B00E3LV204"
},
[1] =>Array
{
    'sku-vendeur'=>"10002",
    'quantity'   =>"3",
    'prix' => "85,96",
    'id-produit'=>"B00PE9ZC1E"
},
[2] =>Array
{
    'sku-vendeur'=>"100024",
    'quantity'   =>"3",
    'prix' => "345,73",
    'id-produit'=>"B01LWMZ33O"
}

但没办法。请有人能帮助我吗?非常感谢你的预付款。

我就是这样做的。
我会将文件作为一个字符串加载并使用正则表达式来解析数据。
然后我将循环一个子数组并使用 array_column 和 array_combine 中的键使其关联。

//$contents = file_get_contents($path); // commented since I don't have the actual file
$contents = "sku-vendeur quantit   prix    id-produit
10000   3   51,95   B00E3LV204
10002   3   85,96   B00PE9ZC1E
100024  3   345,73  B01LWMZ33O
100031  3   88,22   B018NOSAZ6";


preg_match_all("/^(.*?)\s+(.*?)\s+(.*?)\s+(.*?)$/m", $contents, $arr);

unset($arr[0]); // remove 0 since we don't need it.
$keys = array_column($arr, 0); // all headers are in 0

foreach($arr[1] as $key2 => $val){
    if($key2 != 0){ // don't do this with headers.
        $new[] = array_combine($keys,array_column($arr, $key2));
    }
}

var_dump($new);

输出:

array(4) {
  [0]=>
  array(4) {
    ["sku-vendeur"]=>
    string(0) ""
    ["quantit"]=>
    string(5) "10000"
    ["prix"]=>
    string(1) "3"
    ["id-produit"]=>
    string(18) "51,95   B00E3LV204"
  }
  [1]=>
  array(4) {
    ["sku-vendeur"]=>
    string(0) ""
    ["quantit"]=>
    string(5) "10002"
    ["prix"]=>
    string(1) "3"
    ["id-produit"]=>
    string(18) "85,96   B00PE9ZC1E"
  }
  [2]=>
  array(4) {
    ["sku-vendeur"]=>
    string(0) ""
    ["quantit"]=>
    string(6) "100024"
    ["prix"]=>
    string(1) "3"
    ["id-produit"]=>
    string(18) "345,73  B01LWMZ33O"
  }
  [3]=>
  array(4) {
    ["sku-vendeur"]=>
    string(0) ""
    ["quantit"]=>
    string(6) "100031"
    ["prix"]=>
    string(1) "3"
    ["id-produit"]=>
    string(18) "88,22   B018NOSAZ6"
  }
}

https://3v4l.org/YgeRa