Jump to content


GreenOverflow

Member Since 05/07/2011
Offline Last Active 14/02/2021, 18:56
-----

Posts I've Made

In Topic: Algum programador PHP expert?

25/03/2016, 01:46

Amigo não é uma questão de PAGAR, é que eu não vejo mais do que justo uma recompensa, e não faço nada por obrigação é de coração mesmo, pois eu preciso muito mesmo desse código e eu agradeço por ter respondido, fico muito grato, mais voltando ao assunto, eu vi que vc criou um laço mais creio que não é bem isso que o começo do código pede, eu creio que seria um foreach o ideal, olha até onde cheguei, ve se pode me ajudar a terminar:

<?

function tamanho($conexao, $arquivo){

if($conexao == "56"){$kbps = "56 Kbps";}
if($conexao == "128"){$kbps = "128 Kbps";}
if($conexao == "256"){$kbps = "256 Kbps";}
if($conexao == "512"){$kbps = "512 Kbps";}
if($conexao == "1024"){$kbps = "1 Mbps";}
if($conexao == "2048"){$kbps = "2 Mbps";}
if($conexao == "4096"){$kbps = "4 Mbps";}

if(preg_match("/ B/", $arquivo)){$bytes = "1";}
if(preg_match("/ KB/", $arquivo)){$bytes = "1024";}
if(preg_match("/ MB/", $arquivo)){$bytes = "1048576";}
if(preg_match("/ GB/", $arquivo)){$bytes = "1073741824";}

$arquivo = str_replace(",", ".", $arquivo);
$arquivo = preg_replace("/B|KB|MB|GB/", "", $arquivo);

$segundos = ($arquivo * $bytes) / ($conexao * 1000 / 8);$unidades = array("segundo" => "60", "minuto" => "60", "hora" => "24", "dia" => "365", "ano" => time());$tempo = "";if($segundos > 0 and $segundos < .001){$tempo = "1 segundo";}else{if($segundos < 1){$tempo = round($segundos * 1000)." segundos";}else{if($segundos < 60){$tempo = number_format($segundos, 2, ".", "")." segundos";}

else{

$segundos = round($segundos);

foreach($unidades as $chave => $valor){

$n = $segundos % $valor;
$segundos -= $n;
$segundos /= $valor;
$tempo .= "$n $chave".($n!=1?"s":"").", ";
if($segundos == 0){break;}

}

}}}

return"<b>$kbps</b> - $tempo";}

echo tamanho("2048", "99999 MB");

//Valor retornado: 2 Mbps - 36 segundos, 46 minutos, 17 horas, 4 dias

//O objetivo agora é virar a variável dos avessos, pois é para começar com os "4 dias" e terminar nos "36 segundos", mais não estou conseguindo transformar em array, pois está dentro do foreach, se eu colocar o return dentro ele vai dar um break e não vai printar todo o resultado.

?>

Valeu mano, quebrei a cabeça mas consegui:

 

$n = $segundos % $valor;
$segundos -= $n;
$segundos /= $valor;
$a1[] = "$n $unidade".($n !=1 ? "s" : "")."";
$a2 = array_reverse($a1);
$a3 = array_slice($a2, 0, 3);
if(count($a1) > 2){array_splice($a3, 1, 0, ", ");}
array_splice($a3, -1, 0, " e ");
if($segundos == 0){break;}

Coloquei um laço no final, deu tudo certo, valew, abraço.


IPB Skin By Virteq