我剛剛開始學習 PHP 并堅持使用關聯陣列的概念。到目前為止,我看到的所有示例都在處理 csv 檔案。我實際上將 csv 作為一個字串,其中第一行作為鍵,接下來的所有行都是存盤在多維陣列中的值。
輸入的 csv 字串是這樣的,或者我相信這是 csv 字串的樣子:
"fname,lname
a,b
c,d"
輸出應該是:(考慮輸入很長而不僅僅是兩行)
[
["fname"=> "a" , "lname"=>"b"],
["fname"=> "c" , "lname"=>"d"]
]
因為我正在嘗試學習 PHP 所以這是我到目前為止所做的:
<?php
// original string
$OriginalString = "fname,lname,a,b,c,d,e,f";
//get each item
$SplittedString = array(explode(",",$OriginalString));
}
?>
這是這個問題的接近解決方案: PHP CSV to associative array with top row as key and columns as value arrays
我想將 csv 字串轉換為 csv 檔案,然后使用已經在線可用的普通解決方案。那應該可以完成這項作業,但我想看看對于此特定輸出還有哪些其他可能的解決方案。
uj5u.com熱心網友回復:
這是錯誤的:
// original string
$OriginalString = "fname,lname,a,b,c,d,e,f"
您的原始字串有換行符,這在這里非常重要,這意味著您的 $OriginalString 應該是:
// original string
// original string
$OriginalString = "fname,lname
a,b
c,d
e,f";
從那里你可以逐行分解字串,
$lines = explode("\n",$originalString);
從那里它變得有點復雜,你可以用 foreach 迭代這些行,記住第一行給你鍵,一旦你決議出鍵,你就可以用另一個 expand foreach 迭代下一行片段,比如
$keys = array();
$parsed = array();
foreach($lines as $lineno => $line){
if($lineno === 0){
// the first line is special, it contains the keys
$keys = explode(",",$line);
continue;
}
$fragments = explode(",", $line);
$current=array();
foreach($fragments as $fragment_number => $value){
$current[ $keys[$fragment_number] ]=$value;
}
$parsed [] = $current;
}
這使
[
{
"fname": "a",
"lname": "b"
},
{
"fname": "c",
"lname": "d"
},
{
"fname": "e",
"lname": "f"
}
]
uj5u.com熱心網友回復:
根據你的字串,我會
- 在新行上分解字串,給出一個行陣列。
- 在逗號上分解第 1 行以獲取鍵陣列
- 回圈遍歷剩余行并在逗號上爆炸以獲取值陣列
現在您可以根據您的資料構建您的最終陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365294.html
