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



One Response to “Função para Converter de CSV para Array no PHP”

  1. Ramiro Varandas Jr Says:

    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;

    }

Deixe um comentário

Designed by NattyWP Wordpress Themes.
Images by desEXign.