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.