Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estava eu a desenvolver um sistema para minha empresa, e me deparo com uma fato curioso.
Tenho um campo chamado Inicial, Tenho um campo chamado Final.
Dentro de um campo inicial colocamos o valor inicial por exempo 1.
Dentro de um campo final colocamos o valor final por exemplo 2.
O sistema vai cadastrar dentro de um banco de dados todos os valores FLOATs com 2 casas decimais ( 1 1.01 1.02 ... 1.99 2 ) dando um total de 101 números.
Mas vem o porém, não é permitido cadastrar números repetidos, por exemplo se previamente cadastrei 1.10 até 1.20 os numeros e seus meios, não deverão ser cadastrados.
Imaginei o seguinte:
Farei uma busca no banco com
SELECT * FROM `banco` WHERE `valor` >= '" . $_POST['valorInicial'] . "' AND `valorFinal` <= '" . $_POST['valorFinal'] . "'
Retorna todos os valores certinhos que eu procurava:
1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20
Isso eu dando um echo.
Joguei todos os valores em uma array previamente criada e "global" para os ifs elses e fors que os utlizarão.
E a cada valor com um while ( $valores = mysql_fetch_array($busca) )
dou um array_push($valores['valor'],$array);
Ou seja a array guardará todos os valores anteriormente exibidos com o echo:
1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20
Dou um print_r($array);
Exibe todos sem erro nenhum! Um sucesso.
Até ai tudo bem.
Agora na hora de inserir no banco, os valores de 1 até 2 faço da seguinte forma;
for ($i = $_POST['valorInicial']; $i <= $_POST['valorFinal']; $i += 0.01)
{
[indent]if (!in_array($i,$arrays)) mysql_fetch_row("INSERT INTO `banco` VALUES (null,'" . $i . "','" . $_SESSION['idUsuarioLogado'] . "')");[/indent]
}
Todos os valores são realmente inseridos perfeitamente.
Então teremos todos os valores de 1 Até 2 Cadastrados ou seja os 101 números.
Após eu inserir esses números de 1 até 2, se eu tentar inserir os números de 1 até 2.1 ou seja ele inseria os números de 2.01 até 2.1 ( 2.01 2.02 2.03 ... 2.09 2.1);
Mas pelo meio não sei o que acontece mas o in_array buga e ele adiciona os valores
(1.14 1.36 1.39 1.57 1.59 1.61 1.64 1.66 1.68 1.82 1.84 1.86 1.89 1.91 1.93 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.1)
O PHP não pega valores aleatórios, sempre esses.
Não posso por o campo no banco como UNIQUE pois ta assossiado a cada id de Usuário Logado onde podem se repetir numeros.
Saidas do sistema:
echo $valores['valor'] . " ";
É exibido corretamente (Valores já cadastrados no banco):
1 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.3 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.4 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.5 1.51 1.52 1.53 1.54 1.55 1.56 1.57 1.58 1.59 1.6 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.7 1.71 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2
print_r($arrays);
É exibido corretamente (Valores já cadastrados no banco com saida pela array):
Array ( [0] => 1 [1] => 1.01 [2] => 1.02 [3] => 1.03 [4] => 1.04 [5] => 1.05 [6] => 1.06 [7] => 1.07 [8] => 1.08 [9] => 1.09 [10] => 1.1 [11] => 1.11 [12] => 1.12 [13] => 1.13 [14] => 1.14 [15] => 1.15 [16] => 1.16 [17] => 1.17 [18] => 1.18 [19] => 1.19 [20] => 1.2 [21] => 1.21 [22] => 1.22 [23] => 1.23 [24] => 1.24 [25] => 1.25 [26] => 1.26 [27] => 1.27 [28] => 1.28 [29] => 1.29 [30] => 1.3 [31] => 1.31 [32] => 1.32 [33] => 1.33 [34] => 1.34 [35] => 1.35 [36] => 1.36 [37] => 1.37 [38] => 1.38 [39] => 1.39 [40] => 1.4 [41] => 1.41 [42] => 1.42 [43] => 1.43 [44] => 1.44 [45] => 1.45 [46] => 1.46 [47] => 1.47 [48] => 1.48 [49] => 1.49 [50] => 1.5 [51] => 1.51 [52] => 1.52 [53] => 1.53 [54] => 1.54 [55] => 1.55 [56] => 1.56 [57] => 1.57 [58] => 1.58 [59] => 1.59 [60] => 1.6 [61] => 1.61 [62] => 1.62 [63] => 1.63 [64] => 1.64 [65] => 1.65 [66] => 1.66 [67] => 1.67 [68] => 1.68 [69] => 1.69 [70] => 1.7 [71] => 1.71 [72] => 1.72 [73] => 1.73 [74] => 1.74 [75] => 1.75 [76] => 1.76 [77] => 1.77 [78] => 1.78 [79] => 1.79 [80] => 1.8 [81] => 1.81 [82] => 1.82 [83] => 1.83 [84] => 1.84 [85] => 1.85 [86] => 1.86 [87] => 1.87 [88] => 1.88 [89] => 1.89 [90] => 1.9 [91] => 1.91 [92] => 1.92 [93] => 1.93 [94] => 1.94 [95] => 1.95 [96] => 1.96 [97] => 1.97 [98] => 1.98 [99] => 1.99 [100] => 2 )
if (!in_array($i,$arrays)) echo $i . " ";
É exibido com erro:
1.14 1.36 1.39 1.57 1.59 1.61 1.64 1.66 1.68 1.82 1.84 1.86 1.89 1.91 1.93 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.1
Se alguém ja teve problema parecido com o in_array peço humildemente que me diga como proceder.
PS.: com um loop para a array usando comparação $i != $arrays[j], funciona normal, mas creio o loop ser maior, e deixar meu código fonte mais feio.
Mas não tendo jeito voltarei a ele!
Carregando comentários...