4
respostas

Como fazer busca em dois arrays

Bom dia pessoal. Estou fazendo um sistema que calcula lances fixos, mas estou com um grande problema.

No array $cotaSorteada[$obj->ID_GRUPO] eu tenho a cota sorteada de todos os grupos, ou seja, neste array vai ter o grupo que é o indice do array e a cota sorteada deste determinado grupo. No array $arrayCorreto[] ele tem o indice, o grupo e a cota. Bom eu quero procurar no $arrayCorreto[] se existe a $cotaSorteada, caso não existir ele vai ter que pegar as 20 cotas posteriores, ou seja, se a cotaSorteada for 206 e esta cota não tiver no $arrayCorreto[] então ele vai pegar a cota que mais se aproxima.

meu código

foreach ($cotaSorteada as $key) {
                    $max  = max($cotaSorteada);

                        # pesquisa cota sorteada no array de forma incremental
                        if(array_search($key,$arrayCorreto,true)==false){
                            for($i=$key; $i<=$max; $i++){
                                if(array_search($i,$arrayCorreto,true)==true){
                                    //pega a posição do array onde encontrou cota mais proxima
                                    $chaveMais = $key; 
                                    //guarda cota sorteada mais proxima
                                    $cotaSorteadaMais = $i;
                                    //para o loop
                                    $i = $max;
                                }
                            }
                        }
}
4 respostas

Oi João, não entendi, qual é o problema que vc tem? pq pelo código já parece que vc busca informação nos arrays e tudo mais. De todo jeito, basicamente vc precisa fazer o loop por cada um dos arrays.

Olá Alberto.

Então, o que eu quero fazer é, verificar se a cota sorteada existe no meu arrayCorreto, se a cotaSorteada não existir no meu arrayCorreto, então vou ter que pegar o valor que mais se aproxima, mas o problema é que o algoritmo não está fazendo esta busca, entao a $cotaSorteadaMais me retorna vazia quando o correto seria retornar com a cota mais próxima a cota sorteada, por exemplo, se a cota sorteada for igual a 206 e esta cota não estiver no arrayCorreto então eu pego o próximo valor que seria o 207.

Você precisa fazer um loop no array e para cada valor achado, vc subtrai do ideal. O que der a menor diferença é a que vc quer. Você guarda esse valor numa variável e aí sempre compara a próxima subtração o valor guardado na variável.. sempre que for menor, vc troca.

Valeu Alberto, vou testar. Muito obrigado.