Função para Converter de CSV para Array no PHP

CSV, PHP 3 Comments » Marcelo Korjenioski

Olá pes­soal este semana esta com difi­cul­da­des para impor­tar um arquivo CSV pegando o nome das colu­nas ou setando elas em um array para adap­tar o nome das colu­nas com o mesmo nome dos meus fields no BD então com um pouco de pes­quisa e paci­ên­cia criei esta função.

O uso é sim­ples basta indi­car o cami­nho do arquivo e o tipo de sepa­ra­dor que o CSV usa. O padrão é vír­gula porem no Office usa ponto e vírgula.

Crie um arquivo com o nome produtos.csv e insira o código abaixo.


codigo;nome;preco;quantidade
1;lapis;1.20;2
2;borracha;0.50;10
3;caneta;1.50;20

Agora crie um arquivo converte.php e insira o código.


<?php
$caminho = "produtos.csv";

$campos = array('codigo','nome','preco','quantidade</code></span></span>');

$cvs_array = CVStoArray($caminho,$campos);
echo '<pre>';
var_dump($cvs_array);

function CVStoArray($arquivo,Array $campos=null,$separador=';') {
$ponteiro = fopen($arquivo, "r"); // Abro o arquivo para somente leitura
$colunas_nome = fgetcsv($ponteiro, 1000, $separador); // Pego a primeira linha onde tem os nomes dos campos
$numero_colunas = count($colunas_nome);// Vejo quantas colunas o CSV tem para comparar com os $campos.

if(count($campos) != $numero_colunas)
$campos = $colunas_nome;

// executo um looping até pegar todos os registros.

while($valor = fgetcsv($ponteiro, 1000, $separador)) {
$valores[] = $valor;
}
fclose($ponteiro); // fecho a conexão.
$x = 0;
$y = 0;

// Aqui eu pego as colunas e linhas e vou adicionando os valores no $array.

foreach($valores as $i) {
foreach($campos as $z) { // looping para pegar as colunas de acordo com o nome dos campos informados.
$array[$x][$z] = $i[$y];
$y++; // incremento o valor para ir para a próxima coluna.
}
$y = 0; // zero o ponteiro das colunas para ir para a próxima linha.
$x++; // incremento o valor da linha para o próximo registro
}
return $array;
}

?>

Caso tenha alguma duvida ou suges­tão deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

É isso pes­soal uma ótima semana e até o próximo post.

Converter XML para arquivo CSV — XML2CSV

CSV, PHP, XML No Comments » Marcelo Korjenioski

Aten­dendo a soli­ci­ta­ção de um visi­tante do blog criei este tuto­rial com os prin­cí­pios bási­cos para con­ver­ter um arquivo XML em CSV.

Crie um arquivo com o nome produtos.xml e insira o código abaixo.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<catalogo>
<produto id='p1'>
<nome>Caderno</nome>
<preco>2,00</preco>
<quantidade>100</quantidade>
</produto>
<produto id='p2'>
<nome>Caneta</nome>
<preco>1,00</preco>
<quantidade>200</quantidade>
</produto>
<produto id='p3'>
<nome>Lapis</nome>
<preco>0,50</preco>
<quantidade>50</quantidade>
</produto>
<produto id='p4'>
<nome>Livro Matematica</nome>
<preco>11,00</preco>
<quantidade>10</quantidade>
</produto>
<produto id='p5'>
<nome>Apontador</nome>
<preco>1,00</preco>
<quantidade>20</quantidade>
</produto>
</catalogo>

É neces­sá­rio criar um dire­tó­rio com o nome csv e dar per­mis­são de lei­tura e escrita antes de exe­cu­tar o código.

Crie um arquivo com nome xml2csv.php e colo­que o código abaixo.

<?php

$doc = new DomDocument;
// Carrega o arquivo XML com um arquivo DOMDocument
$doc->Load('produtos.xml');
// Defino o nome do elemento pai (root).
$root = $doc->getElementsByTagName('produto');
// Defino o nome dos elementos filhos no arquivo XML que eu desejo.
$children = array('nome','preco','quantidade');
$cvs = NULL;
// Crio o cabeçalho do arquivo CSV com o nome de todos os campos.
$cvs .= "codigo,nome,preco,quantidade";
// Quebra de linha do arquivo CSV.
$cvs .= "\n";

// Faço um loop para pegar todos os elementos pai (root) encontrados.
for ($i=0; $i < $root->length; $i++) {

// Pega o valor do atributo do elemento pai  (root).
$id =  $root->item($i)->getAttribute('id');
// Irei dar um escape em todos os valores usando aspas duplas.
$cvs .= '"' . $id . '",';
// Busca por elementos filhos (child) definidos no array
$valor = array();
foreach ($children as $child) {
$valor[] = '"' . $root->item($i)->getElementsByTagName($child)->item(0)->nodeValue . '"';
}
// Uso o implode para criar uma string com os valores separados por vírgula.
$cvs .= implode(',', $valor);
// Quebra de linha do arquivo CSV.
$cvs .="\n";
}

// getcwd() retorna o diretório atual.
$caminho = getcwd(). '/csv/';
$data = date('d_m_y_H_i_s');
$file_path = $caminho.$data.'_lista.csv';

// Verifique se vc tem permissão de leitura e escrita neste diretorio
if(fwrite($file=fopen($file_path,'w+'),$cvs)) {
fclose($file);
echo "Arquivo gravado com sucesso!";
} else {
echo "Erro ao abrir arquivo!";
}

?>

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Como criar um arquivo CSV e gravar em um diretório.

CSV, PHP, apache 5 Comments » Marcelo Korjenioski

As fun­ções para mani­pu­lar arqui­vos no PHP são fopen(), fwrite() e fclose().

fopen() — Abre o arquivo
fwrite() — Escreve no arquivo
fclose() — Fecha o arquivo

Para­me­tros para lei­tura e escrita em um arquivo usando fopen();

‘r’ —  Abre somente para lei­tura e coloca o pon­teiro no começo do arquivo.

‘r+’ — Abre para lei­tura e gra­va­ção e coloca o pon­teiro no começo do arquivo.

‘w’ —  Abre somente para gra­va­ção e coloca o pon­teiro no começo do arquivo e apaga o con­teúdo que já foi escrito. Se o arquivo não exis­tir tenta criar.

‘w+’ — Abre para lei­tura e escrita e coloca o pon­teiro no iní­cio do arquivo e apaga o con­teúdo que já foi escrito. Se o arquivo não exis­tir tenta criar.

‘a’ —  Abre o arquivo somente para escrita e coloca o pon­teiro no fim do arquivo. Se o arquivo não exis­tir tenta criar.

‘a+’ — Abre o arquivo para lei­tura e gra­va­ção e coloca o pon­teiro no fim do arquivo. Se o arquivo não exis­tir tenta criar.

// getcwd() retorna o diretório atual em sucesso, ou FALSE em falha.
$caminho = getcwd(). '/csv/';
$data = date('d_m_y');
$file_path = $caminho.$data.'_lista.csv';

$dados = '';
// Nome das colunas
$dados .= 'NOME,IDADE';
$dados .="\n";
// Valores da Coluna

$dados .= 'Maria,21';
$dados .="\n";

$dados .= 'João,33';
$dados .="\n";

// Verifique se vc tem permissão de leitura e escrita neste diretorio
if(fwrite($file=fopen($file_path,'w+'),$dados)) {
fclose($file);
echo "Arquivo gravado com sucesso!";
} else {
echo "Erro ao abrir arquivo!";
}

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Designed by NattyWP Wordpress Themes.
Images by desEXign.