Função em PHP que receba um array onde a chave é o cabeçalho de um CSV

Para criar uma função em PHP que receba um array onde a chave é o cabeçalho de um CSV separado por ;, você pode seguir os passos abaixo. A função lerá o array e criará um arquivo CSV usando as chaves como cabeçalhos.



Aqui está um exemplo de como essa função pode ser implementada:

  1. Verificar se o arquivo existe.
  2. Abrir o arquivo no modo apropriado (a para adicionar, w para criar).
  3. Escrever os cabeçalhos apenas se o arquivo não existir.
  4. Adicionar os novos dados ao final do arquivo.

Aqui está a função atualizada:

  1. Verificação de existência do arquivo: Utilizamos file_exists($nomeArquivoCompleto) para verificar se o arquivo já existe.
  2. Modo de abertura do arquivo: a para adição (append) e w para criação (write). O modo é definido com base na existência do arquivo.
  3. Escrita da BOM UTF-8: A BOM UTF-8 é escrita apenas se o arquivo não existir, para garantir que a codificação UTF-8 seja corretamente reconhecida.
  4. Escrita dos cabeçalhos: Os cabeçalhos são escritos apenas se o arquivo não existir.
  5. Adição de dados: Os dados são sempre adicionados ao arquivo, quer ele já exista ou não.

Teste e Execução

Salve o código em um arquivo PHP, por exemplo, adicionar_dados_csv.php, e execute-o em um servidor web que suporte PHP ou diretamente na linha de comando se tiver o PHP instalado localmente.

Depois de executar o script, o arquivo meu_arquivo.csv será criado ou atualizado com os novos dados, mantendo a integridade dos dados anteriores se o arquivo já existir.

Caixa de Código PHP
    
    class CSVHelper {
    public static function arrayToCSV($pasta, $subpasta, $nomearquivo, $linhas, $codemp) {
        // Obtém a data atual
        $ano = date("Y");
        $mes = date("m");
        $dia = date("d");

        // Cria o caminho completo para o arquivo
        $caminho = $pasta . DIRECTORY_SEPARATOR .
            $subpasta . DIRECTORY_SEPARATOR .
            'empresa_' . $codemp . DIRECTORY_SEPARATOR .
            $ano . DIRECTORY_SEPARATOR .
            $mes . DIRECTORY_SEPARATOR .
            $dia;

        // Cria os diretórios se não existirem
        if (!file_exists($caminho)) {
            mkdir($caminho, 0777, true);
        }

        // Define o nome completo do arquivo
        $nomeArquivoCompleto = $caminho . DIRECTORY_SEPARATOR . $nomearquivo . ".csv";
        
        // Verifica se o arquivo já existe
        $fileExists = file_exists($nomeArquivoCompleto);
        
        // Abre o arquivo para escrita ou adição
        $mode = $fileExists ? 'a' : 'w';
        $file = fopen($nomeArquivoCompleto, $mode);

        if ($file === false) {
            throw new Exception('Não foi possível abrir o arquivo para escrita.');
        }

        // Escreve a BOM UTF-8 apenas se o arquivo não existir
        if (!$fileExists) {
            fwrite($file, "\xEF\xBB\xBF");
        }

        // Escreve os cabeçalhos apenas se o arquivo não existir
        if (!$fileExists) {
            $headers = array_keys(reset($linhas));
            fputcsv($file, $headers, ';');
        }

        // Itera sobre cada linha do array e escreve no arquivo CSV
        foreach ($linhas as $row) {
            fputcsv($file, $row, ';');
        }

        // Fecha o arquivo
        fclose($file);

        return $nomeArquivoCompleto;
    }
}

// Exemplo de uso
$dados = [
    [
        'Nome' => 'João',
        'Idade' => 25,
        'Email' => 'joao@example.com'
    ],
    [
        'Nome' => 'Maria',
        'Idade' => 30,
        'Email' => 'maria@example.com'
    ],
    [
        'Nome' => 'Pedro',
        'Idade' => 35,
        'Email' => 'pedro@example.com'
    ]
];

try {
    $caminhoArquivo = CSVHelper::arrayToCSV('pasta', 'subpasta', 'meu_arquivo', $dados, 123);
    echo "Dados adicionados ao arquivo CSV com sucesso: $caminhoArquivo";
} catch (Exception $e) {
    echo 'Erro: ' . $e->getMessage();
}
        
    
    

Post a Comment

Postagem Anterior Próxima Postagem