簡體   English   中英

將 CSV 字符串轉換為關聯數組

[英]Converting a CSV string to an associative array

我正在嘗試基於我的 csv output 創建一個關聯數組。

我在系統的另一部分有一些代碼,它創建了一個 csv,我想做的是在系統的不同部分調用該代碼,但我不希望它保存到 csv 文件中。 目前該代碼所做的只是打印出 csv 字符串。

所以如果我print_r($csv)那么我會得到這個

id,product,price,status\n
1,"Product 1",123,new\n
2,"Product 2",456,cancelled\n
3,"Product 3",543,new\n
4,"Product 4",987,new\n
5,"Product 5",567,draft\n

上述 csv 不會保存到 csv 文件中。

我想要的是能夠將其轉換為數組。

到目前為止,我已經做到了

// This prints out the csv string that you see above
$csv = $csvClass->getCsv();

$lines = explode(PHP_EOL, $csv);
$array = [];

foreach($lines as $line)
{
    $csvArray[] = str_getcsv($line);
}

dd($csvArray);

那給了我這個

array:6 [
  0 => array:4 [
    0 => "id"
    1 => "product"
    2 => "price"
    3 => "status"
  ]
  1 => array:4 [
    0 => "1"
    1 => "Product 1"
    2 => "123"
    3 => "new"
  ]
  2 => array:4 [
    0 => "2"
    1 => "Product 2"
    2 => "456"
    3 => "cancelled"
  ]
  3 => array:4 [
    0 => "3"
    1 => "Product 3"
    2 => "543"
    3 => "new"
  ]
  4 => array:4 [
    0 => "4"
    1 => "Product 4"
    2 => "987"
    3 => "new"
  ]
  5 => array:4 [
    0 => "5"
    1 => "Product 5"
    2 => "567"
    3 => "draft"
  ]
]

但我希望它看起來像這樣

array:4 [
  id => array:5 [
    0 => "1"
    1 => "2"
    2 => "3"
    3 => "4"
    4 => "5"
  ]
  product => array:5 [
    0 => "Product 1"
    1 => "Product 2"
    2 => "Product 3"
    3 => "Product 4"
    4 => "Product 5"
  ]
  price => array:5 [
    0 => "123"
    1 => "456"
    2 => "543"
    3 => "987"
    4 => "567"
  ]
  status => array:5 [
    0 => "new"
    1 => "cancelled"
    2 => "new"
    3 => "new"
    4 => "draft"
  ]
]

其中 csv 的第一行是鍵。

我希望這是有道理的。

$lines = explode(PHP_EOL, $csv);
$array = [];

foreach($lines as $line)
{
    $csvArray[] = str_getcsv($line);
}

// Here we extract first subarray, which contains "headers"
$keys = array_shift($csvArray);

// combine values from two arrays
$result = array_combine(
    $keys,
    // use trick with null as callback 
    array_map(null, ...$csvArray)
);
dd($result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM