Jump to content
Fórum Script Brasil
  • 0

Intervalo de valores igual mercado-livre/americanas


jremerich

Question

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 to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148894
    • Total Posts
      644915
×
×
  • Create New...