Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Geam

Comparar valores array (maior, menor ou outro)

Recommended Posts

Galera to com uma duvida grande q nao sei por onde começar o script, vou explicar para ver se alguem me dar uma luz não quero o codigo pronto mais uma ajuda pfavor, vamos lá;

 

a logica é simples, tenho uma tabela onde estao gravados valores assim:

 

id - dias

1 - 10

2 - 20

3 - 30

 

ai vem o porém recebo um valor do usuario que pode ser qualquer 1 digamos que ele digite "12".

 

o script teria que ver onde se encaixa o 12 no caso a logica seria 12 > 10 < 20 ou seja ele me retornaria que o 12 é verdadeiro entre 10 e 20. se o usuario digita 7 ele retornaria verdadeiro apenas que 7 < 10; pq o sistema terá que calcular um valor para cada valor maximo estipulado, ou seja

 

até 10 dias > cobra por exemplo R$ 2,00

apartir de 10 dias porém menor que 20 dias cobra R$ 5,00

apartir de 20 dias porém menor que 30 cobra R$ 10,00

e acima de 30 dias cobra R$ 20,00

 

só quero uma luz msm, rsrsrs sei que poderia usar a logica da funcao max() e min() mais isso se fosse para comparar apenas 2 valores, nessse caso preciso verificar intervalos entre eles;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use strtotime

http://php.net/manual/pt_BR/function.strtotime.php

 

Acho que a luz está ai. XD

Leia com atenção o POST e entenderá o porque.

 

^^ Boa sorte.

 

Isso acima para comparar datas,

 

Mas também tem os Operadores de Comparação.

http://php.net/manual/pt_BR/language.operators.comparison.php

 

Usando um IF ai acho que ta tudo resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é a questão dos ifs tem logica mais da outra funcao strtotime nao tem haver pois trata datas, ainda estou procurando a solução meus ifs já montei assim mais se fossem valores fixos porém vem de um array;

 

X= 7

v1=10

v2=20

v3=30

 

logica:

if(x <= v1) -> x=v1

if(x > v1) and (x <= v2 ) -> x=v2

if(x > v2) and (x >= v3 ) -> x=v3

 

porém os valores v1, v2, v3 vem de array que poderá ter varios valores valores atribuidos, teria como incluir um indice a cada valor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que usar a lógica dos Algoritmos de Ordenação.

 

Seu array estará ordenado. Você não precisas mexer nele. Porém vai usar a lógica da Ordenação para descobrir onde o número deve entrar, caso ele fosse inserido no array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu entendi ate ai, tem logica o problema é o seguinte, preciso nao so saber onde o numero se ordena mais atribuir um valor para cada um de acordo onde ele se encaixa; fiz assim, mais o resultado vai ser sempre verdadeiro pq a logica se encaixa em todos e nao pode ser:

 

$variacoes = mysql_query("SELECT * FROM tb_varia_diarias ORDER BY varia_dias ASC")or die(mysql_error());

 

$x =15;

 

while($row_variacoes = mysql_fetch_assoc($variacoes)){

 

$y = $row_variacoes['varia_dias']; //aqui é o valor que tem q ser comparado com o inserido pelo usario no caso $x;

$atribuir_valor = $row_variacoes['valor'];

$variacoes = array($y);

foreach ($variacoes as $chave => $valor) {
if ($x <= $valor){ // aqui ele compara se é menor que o primeiro numero do while

$valor = $atribuir_valor;

}

 

//aqui deveria entrar outro if para verificar se é maior que o primeiro resultado e menor que o próximo;

exemplo: digamos que os valores do while fossem (10,20,30);

 

como $x é 15 deveria se encaixar após o 10 e antes do 20 (nao considerar o 30

 

if(($x > $y[no caso 10]) and ($x <= $y(no caso 20))){

$valor = $atribuir_valor;

}

 

e por ultimo verificaria o maior valor de todos e entraria a clausula

if($x >= $maximo){

$valor = $atribuir_valor;

}

}

}

 

ta complicado isso to pensando em mudar a tabela mesmo e dar um valor pra cada campo; :sick: :upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.