Heim  >  Fragen und Antworten  >  Hauptteil

Kombinieren Sie mehrdimensionale Array-Werte mit PHP in einer einzigen Zeile in einer CSV-Datei

Ich habe dieses Problem beim Konvertieren eines mehrdimensionalen Arrays in CSV mit meinem Code.

Das ist die Struktur meines Arrays

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

Ich möchte es zu Berichtszwecken in einer CSV-Datei wie folgt speichern:

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

Was ich im Code gemacht habe, ist Folgendes:

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

Aber die Ausgabe ist nicht das, was ich will, das ist die von meinem Code generierte Ausgabe:

vbas31, registered, no
bnmsa1, compromised, no

Es werden nur die letzten Daten im Array abgerufen. Darf ich fragen, was mit meinem Code nicht stimmt und was ich falsch mache?

P粉186904731P粉186904731227 Tage vor390

Antworte allen(1)Ich werde antworten

  • P粉803444331

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

    我不喜欢嵌套循环,也不喜欢提供的答案,但看看这个:

    你的数组:

    $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

    问候。

    Antwort
    0
  • StornierenAntwort