簡體   English   中英

PHP CSV 到關聯數組,頂行作為鍵,后面的行作為值

[英]PHP CSV to associative array with top row as keys and following rows as values

我剛剛開始學習 PHP 並堅持使用關聯 arrays 的概念。 到目前為止,我看到的所有示例都在處理 csv 文件。 我實際上有 csv 作為字符串,其中第一行充當鍵,所有以下行都是存儲在多維數組中的值。

輸入 csv 字符串是這樣的,或者我相信這是 csv 字符串的樣子:

"fname,lname
 a,b
 c,d" 

output 應該是:(考慮輸入很長,而不僅僅是兩行)

[
   ["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 到關聯數組,其中頂行作為鍵,列作為值 arrays

我想將 csv 字符串轉換為 csv 文件,然后使用已經在線提供的正常解決方案。 那應該可以完成工作,但我想看看對於這個特定的 output,還有什么其他可能的解決方案。

根據你的字符串,我會

  1. 在新行上分解字符串,給出行數組。
  2. 用逗號分解第 1 行以獲取鍵數組
  3. 循環遍歷剩余行並以逗號分解以獲取值數組

現在您可以根據數據構建最終數組。

這是錯誤的:

// 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迭代這些行,記住第一行給你鍵,一旦你解析出鍵,你可以用另一個explode+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"
    }
]

暫無
暫無

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

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