guarda questa versione che mette i nomi dei campi come chiavi dell'array e fa anche un altro paio di elaborazioni per l'output
Codice PHP:
<?php
// !!!!
// si parte dal presupposto che il codice è sempre il primo campo dei file e // che la prima riga dei file contenga i nomi dei campi
$dir = dirname(__FILE__)."/file/*.txt";
// definisce l'array output dell'unione dei file
$out_array = array();
foreach(glob($dir) as $file) {
$fp = fopen($file,'r');
// setta un contatore
$count = 1;
// definisce un array per i nomi dei campi
$nome_campo = array();
while (($data = fgetcsv($fp,0,'|')) !== FALSE) {
foreach ($data as $key => $value) {
if($count == 1) {
// se è la prima riga del file, compila l'array con i nomi dei campi e inserisce anche i dati nell'array output
$nome_campo[] = $value;
$out_array[$data[0]][$value] = $value;
}
else {
if ($key > 0) {
// evita di duplicare il codice del prodotto per ogni file e inserisce i dati nell'array output
$out_array[$data[0]][$nome_campo[$key]] = $value;
}
}
}
// incrementa il contatore
$count++;
}
}
// fa diventare l'array da bidimensionale a monodimensionale
foreach ($out_array as $k => $c) {
// usa | per suddividere i campi
$final_array[] = implode('|', $c);
}
// questo è il risultato dell'array output
print_r($out_array);
// questo è il risultato dell'array dimensionale
print_r($final_array);
// questo è il risultato che metteresti in un file (i campi vuoti sarebbero comunque presenti, trovi due separatori consecutivi)
echo implode("\n", $final_array);
?>
attenzione: se hai un file diverso da articoli che contiene un codice articolo non presente in articoli, ti sballa tutti i campi per il codice mancante
questa può essere una base di partenza per fare i tuoi controlli e togliere dall'array finale i dati che non ti servono