Rumah  >  Soal Jawab  >  teks badan

Menggabungkan nilai tatasusunan berbilang dimensi ke dalam satu baris dalam fail CSV menggunakan PHP

Saya mengalami masalah ini semasa menukar tatasusunan berbilang dimensi kepada csv dengan kod saya.

Ini adalah struktur tatasusunan saya

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 ) )
      )

Saya ingin menyimpannya ke fail csv untuk tujuan pelaporan seperti ini:

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

Apa yang saya lakukan dalam kod ini ialah:

$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);

Tetapi output bukan yang saya mahu, ini adalah output yang dihasilkan oleh kod saya:

vbas31, registered, no
bnmsa1, compromised, no

Ia hanya mendapat data terakhir dalam tatasusunan. Bolehkah saya bertanya apa yang salah dengan kod saya dan apa yang saya lakukan salah?

P粉186904731P粉186904731177 hari yang lalu332

membalas semua(1)saya akan balas

  • P粉803444331

    P粉8034443312024-03-30 09:49:25

    Saya tidak suka gelung bersarang, mahupun jawapan yang diberikan, tetapi lihat ini:

    Susun atur anda:

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

    Kod:

    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.'
    '; }

    Anda boleh melakukannya di tempat lain foreach 中使用另一个 foreach. :) Anda boleh menambah kekunci pada baris baharu dahulu dan kemudian melelang ke atas elemen yang tinggal dan menambahnya. $row Pembolehubah hanya digunakan untuk menyemak keputusan.

    Kod ini sangat mudah dan anda sepatutnya boleh menganalisisnya sendiri.

    Hasil kod di atas ialah:

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

    Salam.

    balas
    0
  • Batalbalas