Trabalho com PHP há bastante tempo e faço quase de tudo nele. Estou trabalhando em um site em PHP com um jogo estilo RPG, e preciso auxílio em uma função.
Preciso que o sistema me retorne um registro aleatório de uma tabela, mas respeitando a chance de cada valor ser atingido, por exemplo:
Minha tabela:
Código -- Nome -- Chance
1 -- São Paulo -- 100
2 -- Rio de Janeiro -- 60
3 -- Santa Catarina -- 20
4 -- Paraná -- 20
Atualmente eu faço assim:
Somo os valores do campo chance (totalchance), e gero o percentual de cada registro ((chance / totalchance)*100):
A função me retorna os valores, sendo que:
"São Paulo" teria 50% de chance de cair
"Rio de Janeiro" teria 30% de chance e assim conforme a tabela...
Para fazer isso eu criei uma função que gera uma matriz com 100 campos, repetindo o nome a cada percentual
Exemplo:
São paulo usaria os 50 primeiros campos da matriz, depois viria o Rio usando os 30 seguintes, e assim por diante.
A partir dessa matriz eu gero um número aleatório de 1 a 100 e retorno o Nome correspondente ao valor "sorteado".
Beleza, funciona legal, apesar de inconsistente...
Mas o problema é que terei que fazer isso com uma tabela com mais de 500 nomes agora, e fica complicado fazer uma matriz de tal tamanho, pois começaria a sobrecarregar o servidor, imagine 50 pessoas acessando o site ao mesmo tempo... E eu teria valores mais precisos, como:
1 -- São Paulo -- 8750
2 -- Rio de Janeiro -- 6080
3 -- Santa Catarina -- 2040
4 -- Paraná -- 2097
5 -- Maranguape -- 7
6 -- Maringa -- 22
Nesse caso, as cidades abaixo dos estados teriam uma chance bem remota de ser sorteadas, mas essa chance existe... Se eu criar uma matrix de 100 campos, essas cidades cairiam fora de vez... E somar tudo e criar uma matriz com tudo? Coitado do servidor... e imagina a internet que a pessoa teria que ter, pra retornar nesse caso mais de 15mil registros só em uma matriz...
Gostaria de saber se existe uma função ou algum modo de fazer isso direto na tabela (sem gerar a matriz), ou se tiverem alguma outra sugestão, estou 100% disposto a ouvir...
Pergunta
Guest --EvandroPH --
Boa Noite,
Trabalho com PHP há bastante tempo e faço quase de tudo nele. Estou trabalhando em um site em PHP com um jogo estilo RPG, e preciso auxílio em uma função.
Preciso que o sistema me retorne um registro aleatório de uma tabela, mas respeitando a chance de cada valor ser atingido, por exemplo:
Minha tabela:
Código -- Nome -- Chance
1 -- São Paulo -- 100
2 -- Rio de Janeiro -- 60
3 -- Santa Catarina -- 20
4 -- Paraná -- 20
Atualmente eu faço assim:
Somo os valores do campo chance (totalchance), e gero o percentual de cada registro ((chance / totalchance)*100):
A função me retorna os valores, sendo que:
"São Paulo" teria 50% de chance de cair
"Rio de Janeiro" teria 30% de chance e assim conforme a tabela...
Para fazer isso eu criei uma função que gera uma matriz com 100 campos, repetindo o nome a cada percentual
Exemplo:
São paulo usaria os 50 primeiros campos da matriz, depois viria o Rio usando os 30 seguintes, e assim por diante.
A partir dessa matriz eu gero um número aleatório de 1 a 100 e retorno o Nome correspondente ao valor "sorteado".
Beleza, funciona legal, apesar de inconsistente...
Mas o problema é que terei que fazer isso com uma tabela com mais de 500 nomes agora, e fica complicado fazer uma matriz de tal tamanho, pois começaria a sobrecarregar o servidor, imagine 50 pessoas acessando o site ao mesmo tempo... E eu teria valores mais precisos, como:
1 -- São Paulo -- 8750
2 -- Rio de Janeiro -- 6080
3 -- Santa Catarina -- 2040
4 -- Paraná -- 2097
5 -- Maranguape -- 7
6 -- Maringa -- 22
Nesse caso, as cidades abaixo dos estados teriam uma chance bem remota de ser sorteadas, mas essa chance existe... Se eu criar uma matrix de 100 campos, essas cidades cairiam fora de vez... E somar tudo e criar uma matriz com tudo? Coitado do servidor... e imagina a internet que a pessoa teria que ter, pra retornar nesse caso mais de 15mil registros só em uma matriz...
Gostaria de saber se existe uma função ou algum modo de fazer isso direto na tabela (sem gerar a matriz), ou se tiverem alguma outra sugestão, estou 100% disposto a ouvir...
Abraço a todos!
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
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.