Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Meu code mostra tudo agrupado por número, queria saber se tem como somar tudo referente ao número,
minutos, torpedos e etc?
segue o code abaixo:
<?php
//Carrega os dados na variavel
$str = 'Cod;Numero;Origem;Duração;Tipo de Uso;Dados
1;5496568512;TAQUARA;00:01:30;Ligações de Oi para outros celulares;
2;5496568512;TAQUARA;00:01:30;Ligações de Oi para outros celulares;
3;5496568520;TAQUARA;00:03:06;Ligações de Oi para outros celulares;
4;5496568520;TAQUARA;00:00:10;Ligações de Oi para outros celulares;8;5299999999;SÃO LEOPOLDO;00:03:06;DDD 31 da Telemar dentro da área Oi;
9;5299999999;SÃO LEOPOLDO;00:01:42;DDD 31 da Telemar dentro da área Oi;
10;5399994444;NACIONAL;;Oi Torpedo;
11;5399994444;NACIONAL;;Oi Torpedo;
12;5399994444;NACIONAL;;Oi Torpedo;
13;5499889988;TAQUARA;00:00:54;Ligações de Oi para Oi;
14;5499889988;TAQUARA;00:00:54;Ligações de Oi para Oi;
15;5499889988;NOVO HAMBURGO;00:03:06;Ligações de Oi para Fixo;
16;5499889988;NOVO HAMBURGO;00:00:54;Ligações de Oi para Fixo;
17;5499889988;NOVO HAMBURGO;00:01:30;Ligações de Oi para Fixo;
18;5499889988;NOVO HAMBURGO;;Oi Torpedo;';
//Separa as linhas
$str = explode(PHP_EOL, $str);
//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
$num[$data[1]][] = $data;
}echo 'Qtd. de números: '. count($num) . PHP_EOL;
echo '<hr>';
echo '<pre>';
print_r($num);
echo '</pre>';
?>To me referindo sem banco de dados!
Lê direitinho que irá entender.
O autor do tópico pega os dados de um arquivo (teste2.csv), separa esses dados com explode(";",$linha).
Você só precisa analisar o code dele e adaptar ao seu caso.
O banco de dados ele usa para inserir o resultado dos cálculos.
Supondo que o arquivo CSV siga este padrão:
Cod;Numero;Origem;Duração;Tipo de Uso;Dados
1;5496568512;TAQUARA;00:01:30;Ligações de Oi para outros celulares;
2;5496568512;TAQUARA;00:01:30;Ligações de Oi para outros celulares;
3;5496568520;TAQUARA;00:03:06;Ligações de Oi para outros celulares;
4;5496568520;TAQUARA;00:00:10;Ligações de Oi para outros celulares;
17;5499889988;NOVO HAMBURGO;00:01:30;Ligações de Oi para Fixo;
Supondo que o arquivo não seja muito grande:
<?php
$filename = 'file.csv';
$file = file( $filename, FILE_IGNORE_NEW_LINES );
array_shift( $file );
array_walk(
$file,
function( $line ) use( &$result )
{
$line = explode( ';', $line );
array_shift( $line );
if( isset( $result[ reset( $line ) ] ) )
{
$a = $result[ reset( $line ) ];
$time = explode( ':', $line[ 2 ] );
$result[ reset( $line ) ]
->add(
DateInterval::createFromDateString(
sprintf(
'%u hours + %u minutes + %u seconds', $time[ 0 ], $time[ 1 ], $time[ 2 ]
)
)
);
}
else
{
$result[ reset( $line ) ] = new DateTime( $line[ 2 ] );
}
}
);
foreach( $result as $key => $value ) printf( '%s = %s<br/>', $key, $value->format( 'H:i:s' ) );
}
?>
Saída:
5496568512 = 00:03:00
5496568520 = 00:03:16
5499889988 = 00:01:30
Carlos Coelho Valeu pela resposta, poderia me explicar o que cada linha faz? deu um bug na soma dos minutos só...
Leia
http://forum.imasters.com.br/topic/487586-problema-na-soma-horas-minutos-segundos-php-e-mysql/