Ir para conteúdo
Fórum Script Brasil
  • 0

Intervalo de valores igual mercado-livre/americanas


jremerich

Pergunta

Rapaziada! Beleza?

Estou fazendo um site de anúncios e o projeto pede aquelas barras laterais que o mercado livre, americanas.com e outros e-commerces usam que contém intervalo de valores algo como abaixo:

Preço

- R$ 0,00 até R$ 100,00

- R$ 100,00 até R$ 200,00

- R$ 200,00 até R$ 300,00

Mas esses intervalos dependem dos valores dos produtos. Essa informação eu já tenho organizado em um array +/- como abaixo:

$valores = array(
	8790.0 => array(8790.0, 3),
	6300.0 => array(6300.0, 2),
	0.0 => array(0.0, 6)
);

Sendo constituído por: $valores[VALOR-DO-PRODUTO] = array(VALOR-DO-PRODUTO, qtd-de-produtos-com-o-mesmo-valor)

Eu fiz um script que busca o valor máximo e depois divide esse máximo por 3, que é a quantidade de faixas que quero exibir (like mercado livre) a esse resultado divido por 1000. Após a divisão por 1000 eu aplico a função ceil para arredondar para cima e multiplico novamente por 1000.

Vejam o script de testes completo:

<?php
$valores = array(
	8790.0 => array(8790.0, 3),
	6300.0 => array(6300.0, 2),
	0.0 => array(0.0, 6)
);

$max = 0;
foreach($valores as $vlr=>$dados){
	if($vlr > $max){
		$max = $vlr;
	}
}
echo $max;
//divide pela quantidade de faixas (3)
$qtdFaixas = 3;
$intervaloFaixas = ceil(($max/$qtdFaixas)/1000)*1000;
$arrFaixas = array();
$ini = 0;
for($i=0; $i<$qtdFaixas; $i++){
	$qtdResultados = 0;
	$fim = $ini+$intervaloFaixas;
	foreach($valores as $vlr=>$dados){
		if($vlr >= $ini && $vlr <= $fim){
			$qtdResultados += $dados[1];
		}
	}
	$arrTmp = array($ini, $fim, $qtdResultados);
	$arrFaixas[] = $arrTmp;
	$ini = $fim;
}

echo '<pre>';
print_r($arrFaixas);
?>

Assim retornou o que eu quero, parece ter solucionado.. acontece que no meu site terá produtos com 1.000 até, sei lá, 1.000.000 e se eu continuar operando com 1.000 não vai trazer o resultado que eu quero.

Chequei a pensar em contar quantas casas antes do ponto flutuante tem pra então gerar o operador que eu preciso, mas pensei em perguntar pra turma antes pois achei gambiarra de mais!

Aguardo ancioso a ajuda dos amigos!

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...