Phaneronsoft desenvolvimento Web
Ph: 04102010
 

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

CSV, PHP Comentar >> 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.

Com­par­ti­lhe com seus ami­gos:
Print Facebook Google Bookmarks PDF RSS Twitter LinkedIn


http://www.ramiro.varandas.nom.br Ramiro Varan­das Jr

Fala Mar­celo,

Você tam­bém pode fazer dessa maneira.


/**
* Converte de CSV para Array
*
* @param string $aArquivo Nome do arquivo com caminho completo
* @param boolean $aColunasPrimeiraLinha Indica se a primeira linha contém o nome das colunas
* @param string $aSeparador Caractere separador de campos
* @return array
*/
function csvToArray($aArquivo, $aColunasPrimeiraLinha = true, $aSeparador = ';') {

$vRe­gis­tros = file($aArquivo);
if($aColunasPrimeiraLinha === true) {
$vCo­lu­nas = explode($aSeparador, array_shift($vRegistros));
$vRe­gis­tros­Count = count($vRegistros);
for($i = 0; $i < $vRe­gis­tros­Count; $i++) {
$vRegistros[$i] = array_combine($vColunas, explode($aSeparador, $vRegistros[$i]));
}
} else {
$vRe­gis­tros­Count = count($vRegistros);
for($i = 0; $i < $vRe­gis­tros­Count; $i++) {
$vRegistros[$i] = explode($aSeparador, $vRegistros[$i]);
}
}

return $vRegistros;

}

http://www.walkeralencar.com Wal­ker de Alencar

Que tal usar:

func­tion Csv­To­Ar­ray ($file­name, $sepa­ra­tor = “;â€)
{
//le o arquivo car­re­gando para um array
$lines = file($filename);
//elimina o pri­meiro item do array
array_shift($lines);
foreach($lines as $key => $value){
//gera um array a par­tir da divi­sao das strings a cada “;“
$lines[$key] = explode($separator,$value);
}
return $lines;
}

http://www.phaneronsoft.com Mar­celo Korjenioski

Obri­gado pela dica.

Mar­celo

Vou fazer um abaixo-assinado para tirar o Ramiro da Internet.

blog comments powered by Disqus
Designed by NattyWP Wordpress Themes.
Images by desEXign.
 


You are viewing a mobilized version of this site...
View original page here

Mobilized by Mowser Mowser