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:
- Verificar se o arquivo existe.
- Abrir o arquivo no modo apropriado (
a
para adicionar,w
para criar). - Escrever os cabeçalhos apenas se o arquivo não existir.
- Adicionar os novos dados ao final do arquivo.
Aqui está a função atualizada:
- Verificação de existência do arquivo: Utilizamos
file_exists($nomeArquivoCompleto)
para verificar se o arquivo já existe. - Modo de abertura do arquivo:
a
para adição (append) ew
para criação (write). O modo é definido com base na existência do arquivo. - 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.
- Escrita dos cabeçalhos: Os cabeçalhos são escritos apenas se o arquivo não existir.
- 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.
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();
}
Postar um comentário