Olá pessoal este semana esta com dificuldades para importar um arquivo CSV pegando o nome das colunas ou setando elas em um array para adaptar o nome das colunas com o mesmo nome dos meus fields no BD então com um pouco de pesquisa e paciência criei esta função.
O uso é simples basta indicar o caminho do arquivo e o tipo de separador que o CSV usa. O padrão é vírgula 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 sugestão deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
É isso pessoal uma ótima semana e até o próximo post.

Fala Marcelo,
Você també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 = ';') {
$vRegistros = file($aArquivo);
if($aColunasPrimeiraLinha === true) {
$vColunas = explode($aSeparador, array_shift($vRegistros));
$vRegistrosCount = count($vRegistros);
for($i = 0; $i < $vRegistrosCount; $i++) {
$vRegistros[$i] = array_combine($vColunas, explode($aSeparador, $vRegistros[$i]));
}
} else {
$vRegistrosCount = count($vRegistros);
for($i = 0; $i < $vRegistrosCount; $i++) {
$vRegistros[$i] = explode($aSeparador, $vRegistros[$i]);
}
}
return $vRegistros;
}
Que tal usar:
function CsvToArray ($filename, $separator = “;”)
{
//le o arquivo carregando para um array
$lines = file($filename);
//elimina o primeiro item do array
array_shift($lines);
foreach($lines as $key => $value){
//gera um array a partir da divisao das strings a cada “;“
$lines[$key] = explode($separator,$value);
}
return $lines;
}
Obrigado pela dica.