Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Douglas Fernandess

recuperar dados array se tiver uma string em um campo

Recommended Posts

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
 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
        )

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.