Ver Mensaje Individual
  #10 (permalink)  
Antiguo 07/10/2013, 02:16
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 6 meses
Puntos: 84
Respuesta: Problema al generar un valor aleatorio sin que se repita

Cita:
Iniciado por Cuervoo Ver Mensaje
Te fijaste cual es el valor que tiene result cuando da null? Hacé que muestre $this->result y fijate si siempre es el mismo valor cuando da null o va cambiando. Seguile los pasos en las tres líneas que lo modificás.

Código PHP:
Ver original
  1. $this->result = count ( $imput );
  2.            
  3. //resto un valor para que random no escoja un valor no encontrado en el array
  4. $this->result = $this->result - 1;
  5.            
  6. //elijo un numero al azar
  7. $this->result = mt_rand( 0, $this->result );

En esas tres.
He hecho var_dump() a las tres líneas.

El código en el método para los var_dump() ha sido el siguiente

Código PHP:
Ver original
  1. //cuento los valores del array
  2.             echo "result count<br>";
  3.             $this->result = count ( $imput );
  4.            
  5.             var_dump( $this->result );
  6.            
  7.             //resto un valor para que random no escoja un valor no encontrado en el array
  8.             echo "result -1<br>";
  9.             $this->result = $this->result - 1;
  10.            
  11.             var_dump( $this->result );
  12.             //elijo un numero al azar
  13.             echo "result mt_rand<br>";
  14.             $this->result = mt_rand( 0, $this->result );

Mientras que el código para los var_dump() en la función ha sido el siguiente

Código PHP:
Ver original
  1. for($i=0; $i<=4 ; $i++)
  2.            
  3.         {
  4.             //obtengo 5 numeros aleatorios        
  5.             echo "iteración <b>". $i."</b><br>";
  6.             $getquestionrandom      = $newget->getrandomvalue ( $getquestions );
  7.                
  8.             ?>
  9.             <pre>
  10.             <?php
  11.                
  12.                 var_dump( $getquestionrandom );
  13.                 var_dump( $_SESSION['randomresult']['count'] );
  14.                 echo "fin de la iteración <b>". $i."</b><br>";
  15.            
  16.             //var_dump($getquestions[$getquestionrandom]);
  17.             ?>
  18.             </pre>
  19.             <?php
  20.             //guardo las preguntas segun los numeros anteriores
  21.             array_push($questionsrandom, $getquestions[$getquestionrandom]);
  22.            
  23.             //instancio al metodo para hacer las sustituciones
  24.             $questionsrandom[$i]['question'] = $newget->setvaluestags($tags,
  25.             "@".$_SESSION['randomresult']['friend']['screen_name'], $questionsrandom[$i]['question']);
  26.         }

Los resultados

Código PHP:
Ver original
  1. //estos primeros var_dump corresponden a la elección del usuario aleatoriamente
  2. //por este motivo no se cuenta y no influye en el problema puesto que antes de
  3. //entrar en las preguntas aleatorias la sesión count es vaciada.
  4. result count
  5. int 5
  6. result -1
  7. int 4
  8. result mt_rand
  9. int 2
  10.            
  11.                        
  12.  
  13.  //aquí es donde comienza a escoger las preguntas aleatorias                       
  14.                                
  15.  
  16.                 iteración 0
  17. result count
  18. int 11
  19. result -1
  20. int 10
  21. result mt_rand
  22. int 0
  23.            
  24.                        
  25.  
  26.                            
  27.                                
  28.  
  29.                            
  30.            
  31. int 0
  32. array (size=1)
  33.   0 => int 0
  34.                 fin de la iteración 0
  35.            
  36.  
  37.                 iteración 1
  38. result count
  39. int 11
  40. result -1
  41. int 10
  42. result mt_rand
  43. int 10
  44.            
  45.                        
  46.  
  47.                            
  48.                                
  49.  
  50.                            
  51.            
  52. int 10
  53. array (size=2)
  54.   0 => int 0
  55.   1 => int 10
  56.                 fin de la iteración 1
  57.            
  58.  
  59.                 iteración 2
  60. result count
  61. int 11
  62. result -1
  63. int 10
  64. result mt_rand
  65. int 6
  66.            
  67.                        
  68.  
  69.                            
  70.                                
  71.  
  72.                            
  73.            
  74. int 6
  75. array (size=3)
  76.   0 => int 0
  77.   1 => int 10
  78.   2 => int 6
  79.                 fin de la iteración 2
  80.            
  81.  
  82.                 iteración 3
  83. result count
  84. int 11
  85. result -1
  86. int 10
  87. result mt_rand
  88. int 0
  89.            
  90.                        
  91.  
  92. result count
  93. int 11
  94. result -1
  95. int 10
  96. result mt_rand
  97. int 5
  98.            
  99.                        
  100.  
  101.                            
  102.                                
  103.  
  104.                            
  105.            
  106. null
  107. array (size=4)
  108.   0 => int 0
  109.   1 => int 10
  110.   2 => int 6
  111.   3 => int 5
  112.                 fin de la iteración 3
  113.            
  114.  
  115.            
  116. //esto es del xdebug
  117. ( ! ) Notice: Undefined index:  in C:\xampp\htdocs\xampp\web\videosfav\twitter2\control\controller_public.php on line 218
  118. Call Stack
  119. #   Time    Memory  Function    Location
  120. 1   0.0010  135904  {main}(  )  ..\index.php:0
  121. 2   1.0441  582568  html_start(  )  ..\index.php:23
  122. 3   1.0441  582584  play_start(  )  ..\html_public.php:133
  123.  
  124.                 iteración 4
  125. result count
  126. int 11
  127. result -1
  128. int 10
  129. result mt_rand
  130. int 0
  131.            
  132.                        
  133.  
  134. result count
  135. int 11
  136. result -1
  137. int 10
  138. result mt_rand
  139. int 3
  140.            
  141.                        
  142.  
  143.                            
  144.                                
  145.  
  146.                            
  147.            
  148. null
  149. array (size=5)
  150.   0 => int 0
  151.   1 => int 10
  152.   2 => int 6
  153.   3 => int 5
  154.   4 => int 3
  155.                 fin de la iteración 4
  156.            
  157.  
  158.            
  159. //esto es del xdebug
  160. ( ! ) Notice: Undefined index:  in C:\xampp\htdocs\xampp\web\videosfav\twitter2\control\controller_public.php on line 218
  161. Call Stack
  162. #   Time    Memory  Function    Location
  163. 1   0.0010  135904  {main}(  )  ..\index.php:0
  164. 2   1.0441  582568  html_start(  )  ..\index.php:23
  165. 3   1.0441  582584  play_start(  )  ..\html_public.php:133

EDITO

La aparición de null no sigue un patrón. Puede aparecer en cualquier lugar y hasta en dos posiciones en una misma ejecución. Nunca tres, hasta el momento. Hay veces que no aparece null y lo realiza tal y como se espera.
__________________
Ayúdame a hacerlo por mi mismo.