Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Opa galera me deparei com a seguinte necessidade ao meu sistema. Exemplo tenho os campos número, valor, e tipo de serviço. O seguinte de exemplo:
Número;Valor (R$);Tipo de Serviço
81585265;10,45;Assinatura Full
81110532;12,26;Dados 3G Assinatura
81110532;55,78;Controle Total
81585265;10,45;Pacote Básico de dados
81110532;88,47;Pacote de Assinatura Básico
Eu fiz assim mais não obtive muito sucesso....
<?php
$dados = pegarDadosCSV($arquivo = file_get_contents('tt.csv'));
//pega dados arquivo csv
function pegarDadosCSV($arquivo){
//Separa as linhas
$str = explode(PHP_EOL, trim($arquivo));
//Remove o cabeçalho
unset($str[0]);
//Inicia o array que irá receber os números
$num = array();
//Percorre cada linha
foreach($str as $row){
//Separa as colunas
$data = explode(';', $row);
//Agrupa as colunas usando o número como chave
// agrupa tudo pelo tipo de uso como referencia
$num[$data['1']][] = $data;
// dados vindo do excel para calculo
$numero_csv = $data['1']; //numero do celular do excel
$duracao_csv = $data['7']; //duracao das ligacoes
$tipo_uso_csv = $data['9']; //tipo de uso
$dados_csv = str_replace("kb","",($data[13])); //dados
$descricao_csv = $data[11]; //Oi VC Intra-grupo E Descricao "Assinatura"
$total_conta = $data[10]; //total da conta
}// fim foreach
function comparar($var){
$var_busca = 'Assinatura';
return(strstr($var,$var_busca));
}
$comparar = array_filter($data, "comparar");
if(isset($comparar) && $comparar != ''){
echo '<pre>';
print_r($comparar);
echo '</pre>';
}
}//function
?>
Há funções que podem fazer isso por você... não precisa quebrar tanto a cabeça.
Use a função file ao invés de file_get_contents, pois ela pega o conteúdo do arquivo para um array, colocando cada linha do arquivo em um elemento do array. Depois é só colocar esse array em um laço foreach e usar a função str_getcsv para pegar os dados CSV.
$linhas = file("arquivo.csv");
$dados = array();
foreach ($linhas as $linha)
{
if (!isset($campos)) {
$campos = str_getcsv ($linha, ';');
continue;
}
$dados []= array_combine($campos, str_getcsv ($linha, ';'));
}
echo "<pre>" . print_r($dados, true) . "</pre>";
Resultado:
Array
(
[0] => Array
(
[Número] => 81585265
[Valor (R$)] => 10,45
[Tipo de Serviço] => Assinatura Full
)
[1] => Array
(
[Número] => 81110532
[Valor (R$)] => 12,26
[Tipo de Serviço] => Dados 3G Assinatura
)
[2] => Array
(
[Número] => 81110532
[Valor (R$)] => 55,78
[Tipo de Serviço] => Controle Total
)
[3] => Array
(
[Número] => 81585265
[Valor (R$)] => 10,45
[Tipo de Serviço] => Pacote Básico de dados
)
[4] => Array
(
[Número] => 81110532
[Valor (R$)] => 88,47
[Tipo de Serviço] => Pacote de Assinatura Básico
)
)Bom Pessoal me desculpem ontem eu escrevi aqui minha dúvida mais não apareceu completamente tudo... Creio que tah com bug o editor ou sei la.......
Eu preciso soma os valores sempre dos números que contenham a seguinte palavra no tipo de serviço "Assinatura" agrupado por número...
E sobre os valores com ponto e vírgula eu sei que tem que ser com Ponto....
Primeiro de tudo O QUE?
não vi a dúvida, e segunda coisa que é a 10 vez que vejo no fórum esse mês.
Campos monetários não podem conter virgulas, tem que ser do tipo double ou float com ponto na casa decimais e vazio no separador de milhas
LOGO
1.234,99
seria
1234.99