使用 PHP 將多維數組值合併到 CSV 檔案中的單行中
P粉186904731
P粉186904731 2024-03-29 19:55:47
0
1
329

我的程式碼將多維數組轉換為 csv 時遇到此問題。

這是我的陣列的結構

Array (
        [vbas31] => 
                Array ( [enabled] => Array ( [0] => NO ) 
                        [registered] => Array ( [0] => NO ) ) 
        [bnmsa1] => 
                Array ( [enabled] => Array ( [0] => YES ) 
                        [registered] => Array ( [0] => NO )
                        [compromised] => Array ( [0] => NO ) )
      )

我想將其儲存到 csv 檔案以用於報告目的,如下所示:

vbas31, enabled, no, registered, no
bnmsa1, enabled, yes, registered, no, compromised, no

我在程式碼中所做的事情是這樣的:

$file = fopen('testfile.csv','w');
$keysarr = array_keys($jsonArr);

for($i = 0; $i < count($jsonArr); $i++) {
    foreach($jsonArr[$keysarr[$i]] as $key => $value) {
        echo $key . " : " . $value[0] . "<br>";
    
    }
    $new_line = [$keysarr[$i], $key, $value[0]];


    fputcsv($file, $new_line);
}

fclose($file);

但是輸出不是我想要的,這是我的程式碼產生的輸出:

vbas31, registered, no
bnmsa1, compromised, no

它只取得數組中的最後一個資料。我可以問我的程式碼有什麼問題以及我做錯了什麼嗎?

P粉186904731
P粉186904731

全部回覆(1)
P粉803444331

我不喜歡巢狀循環,也不喜歡提供的答案,但看看這個:

你的陣列:

#
$yourArray = [
    'bnas31' => [
            'enabled' => [0 => 'NO'],
            'registered' => [0 => 'NO']
    ],
    'bnmsa1' => [
        'enabled' => [0 => 'YES'],
        'registered' => [0 => 'NO'],
        'compromised' => [0 => 'NO']
    ]
];

程式碼:

foreach($yourArray as $key1 => $value1) {
    $row = $key1;
    $line = [$key1];
    foreach ($value1 as $key2 => $value2) {
        $row .= ','.$key2.','.$value2[0];
        $line = array_merge($line, [$key2, $value2[0]]);
    }
    echo $row.'
'; }

您可以在另一個 foreach 中使用另一個 foreach。 :) 您可以先將鍵新增到新行,然後迭代其餘元素並新增它們。 $row 變數僅用於檢查結果。

程式碼很簡單,你應該可以自己分析。

上述程式碼的結果是:

bnas31,enabled,NO,registered,NO
bnmsa1,enabled,YES,registered,NO,compromised,NO

問候。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!