Sou um programador novato e pesquisei muito sobre minha dúvida, mas não consegui encontrar uma solução útil ou um tutorial sobre isso.
Meu objetivo é ter uma matriz PHP e os elementos da matriz estão sendo exibidos em uma lista na página.
Quero adicionar uma opção, para que se um usuário quiser, ele / ela pode criar um arquivo CSV com elementos de array e baixá-lo.
Eu não sei fazer isso. Eu também procurei muito. Mas ainda não encontrei nenhum recurso útil.
Forneça algum tutorial, solução ou conselho para implementá-lo sozinho. Como sou um novato, forneça soluções fáceis de implementar.
Minha matriz se parece com:
Array
(
[0] => Array
(
[fs_id] => 4c524d8abfc6ef3b201f489c
[name] => restaurant
[lat] => 40.702692
[lng] => -74.012869
[address] => new york
[postalCode] =>
[city] => NEW YORK
[state] => ny
[business_type] => BBQ Joint
[url] =>
)
)
php
export-to-csv
user2302780
fonte
fonte
Respostas:
Você pode usar o fputcsv () embutido para seus arrays para gerar linhas csv corretas de seu array, então você terá que fazer um loop e coletar as linhas, assim:
Para fazer os navegadores oferecerem a caixa de diálogo "Salvar como", você terá que enviar cabeçalhos HTTP como este (veja mais sobre este cabeçalho na rfc ):
Juntando tudo:
E você pode usá-lo assim:
Atualização:
Em vez de
php://memory
você também pode usar ophp://output
para o descritor de arquivo e acabar com a busca e tal:fonte
echo
as linhas CSV geradas diretamente no loop?fputcsv()
não retorna a linha gerada, será necessário um descritor de arquivo para escrever. Você pode retroceder, escrever, limpar o buffer em cada iteração, se você tiver restrição de memória. Ou apenas use um arquivo temporário real.$data = array_merge(array(array_keys($data[0])), $data);
php://output
consulte o segundo exemplo de código atualizado.Não tenho reputação suficiente para responder à solução @ complex857. Funciona muito bem, mas eu tenho que adicionar; no final do cabeçalho Content-Disposition. Sem ele, o navegador adiciona dois travessões no final do nome do arquivo (por exemplo, em vez de "export.csv", o arquivo é salvo como "export.csv--"). Provavelmente, ele tenta limpar \ r \ n no final da linha do cabeçalho.
A linha correta deve ser semelhante a esta:
Caso o CSV contenha caracteres UTF-8, você deve alterar a codificação para UTF-8 alterando a linha Content-Type:
Além disso, acho mais elegante usar rewind () em vez de fseek ():
Obrigado pela sua solução!
fonte
--
no final dos nomes de arquivo, no entanto, atualizei a resposta (por que não apenas enviar uma edição?)Tente ... download csv.
fonte
Essa é a função que usei no meu projeto e funciona conforme o esperado.
fonte
Use o código abaixo para converter uma matriz php em CSV
fonte
Se sua estrutura de array sempre será multidimensional dessa maneira exata, podemos iterar por meio de elementos como:
Essa é uma maneira de fazer ... você poderia fazer manualmente, mas desta forma é mais rápida e fácil de entender e ler.
Então, você administraria seus cabeçalhos, algo que complex857 está fazendo para cuspir o arquivo. Em seguida, você pode excluir o arquivo usando unlink () se não precisar mais dele ou pode deixá-lo no servidor, se desejar.
fonte
Use o seguinte,
fonte