Probation

Asked

Viewed 127 times

5

I have a if that is never being satisfied.

I think I’m using some loop wrong way. I’ve already checked the value of all variables, and they’re all correct.

So I’m going to pass here values of variables and you, if you can, analyze why the if is not satisfied.

<?php
session_start();
//Aqui eu pego o numero de cartelas que o usuário informou em outra pag.
$ncarts = $_SESSION['ncarts'];
//pego o numero de pedras de cada cartela que o usuario informou em outra pag. 
$npedras = $_SESSION['npedras'];
// Pego a quantidade de pedras que vão ser sorteadas, inserido em outra pag.
$quantidade_sorteada = $_SESSION['quantidade_sorteada'];
/*inicio a array, posteriormente usada para guardar os números de cada cartela, sendo que cada indice é uma cartela, e seus valores são as pedras dessa cartela*/
$numeros_cartela = array();
/*inicio a array que guardará os valores que foram sorteados pelo usuário, cada índice tem apenas um valor, exemplo, sorteado 1 = 2, sorteado 3 = 12, etc...*/
$sorted = array();
/* aqui eu conto o numero de acertos que cada cartela faz, sendo que cada índice começa valendo zero - óbvio.*/
$contador_pontos_cartela = array();

/* Cada cartela quando é registrada em outra página tem um arquivo criado, para guardar seus valores. Esse arquivo tem o formato "cartela{$p).txt", onde $p é o numero da cartela. Então eu salvo cada linha do arquivo em um índice do array $numeros_cartela */
for ($p=1; $p<=$ncarts; $p++) {
$numeros_cartela[$p] = file ("cartela{$p}.txt"); 
}

/*Eu em outra página peguei os números sorteados, cada um em um campo com name variável. E orientei o form com GET, para esse arquivo aqui. Por isso cada número que o usuário digitou como sendo os sorteados, serão salvos em um array $sorted*/
for ($k=1; $k<=$quantidade_sorteada; $k++) {
$sorted[$k] = $_GET["numero$k"]; 
}

//aqui eu percorro as cartelas
for ($p=1; $p<=$ncarts; $p++) {
//inicio o contador da cartela como zero
$contador_pontos_cartela[$p] = 0;
for ($g=1; $g<=$quantidade_sorteada; $g++) {
/*cada cartela possui um índice, no array $numeros_cartela, então eu vou percorrer cada cartela, passando cada elemento da cartela para a variável $w.*/
foreach ($numeros_cartela[$p] as $w) {
// exibo os valores envolvidos na condicional, só para ver se estão certos
echo "Valor de w: {$w}<br>";
echo "Valor de sorted: {$sorted[$g]}<br>";
//confere se o numero sorteado é igual ao némero da cartela de índice $p
if ($w == $sorted[$g]){
//se for igual, soma 1 ao contador da cartela analisada
$contador_pontos_cartela[$p] += 1;
// esse echo foi só para ver se o problema era no if realmente...
echo "somou";
     }
    }
  }
}
// aqui eu imprimo na tela o número de acertos de cada cartela
for ($t=1; $t<=$ncarts; $t++) {
echo "Acertos cartela {$t}: {$contador_pontos_cartela[$t]}<br>";
}
?>

Suppose then that:

$ncarts = 3;
$quantidade_sorteada = 3;
$sorted[1] = 1;
$sorted[2] = 3;
$sorted[3] = 5;
$numeros_cartela[1] = array(1, 3);
$numeros_cartela[2] = array(5, 7);
$numeros_cartela[3] = array(9, 11);

With that, from what I had calculated, the last echo - there the end - would return:

Acertos cartela 1: 2
Acertos cartela 2: 1
Acertos cartela 3: 0

But the return is:

Acertos cartela 1: 0
Acertos cartela 2: 0
Acertos cartela 3: 0

And the return of that echo before the if is:

Valor de w: 1 
Valor de sorted: 1
Valor de w: 3 
Valor de sorted: 1
Valor de w: 1 
Valor de sorted: 3
Valor de w: 3 
Valor de sorted: 3
Valor de w: 1 
Valor de sorted: 5
Valor de w: 3 
Valor de sorted: 5
Valor de w: 5 
Valor de sorted: 1
Valor de w: 7 
Valor de sorted: 1
Valor de w: 5 
Valor de sorted: 3
Valor de w: 7 
Valor de sorted: 3
Valor de w: 5 
Valor de sorted: 5
Valor de w: 7 
Valor de sorted: 5
Valor de w: 9 
Valor de sorted: 1
Valor de w: 11 
Valor de sorted: 1
Valor de w: 9 
Valor de sorted: 3
Valor de w: 11 
Valor de sorted: 3
Valor de w: 9 
Valor de sorted: 5
Valor de w: 11 
Valor de sorted: 5

Could someone please explain to me why this result?

  • You can put comments in your code to better understand your logic?

  • I’ll do that.

  • Okay. I explained it to you, look there. I hope you understand.

  • Zebra, is it by any chance the same question? http://answall.com/questions/14688/structura-com-for-if-foreach-problem

  • @Zebradomal never prints the summed?

  • @Zebradomal makes a print of $w and of $sorted[$g] before the if to see what values they take.

  • @Brasofilo It’s not the same.

  • @Jorgeb. He never prints the hat. Just what I put him there for, just to see if he would print it, giving me certainty in this case that the parole was not satisfied.

  • @Jorgeb. I already did that Jorge! And the values are correct, by the way of doubts, I added in the question, look there.

Show 4 more comments

1 answer

4


I figured out what the problem is!

What I did; I gave one var_dump on top of the if, and I noticed that the variable $w contains empty spaces before it. I used the function trim() PHP, I removed the spaces, and everything worked perfectly.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.