[英]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.