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!