Foros del Web » Programando para Internet » PHP »

Mal funcionamiento Foreach

Estas en el tema de Mal funcionamiento Foreach en el foro de PHP en Foros del Web. Tengo un problema con un foreach al que ya le di varias vueltas y no puedo entender que esta pasando. El problema es que tengo ...
  #1 (permalink)  
Antiguo 02/09/2012, 17:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 20
Antigüedad: 11 años, 11 meses
Puntos: 2
Pregunta Mal funcionamiento Foreach

Tengo un problema con un foreach al que ya le di varias vueltas y no puedo entender que esta pasando. El problema es que tengo un array con, por ejemplo, valores A y B y cuando entra al foreach, este recorre dos veces el primero (osea, A, A, y B) copio codigo y explico con comentarios:

$amigosSQL = mysql_query("select ID_Contacto from relaciones where ID_Usuario = '$_SESSION[id]'");
//Traigo datos de una base, en mi caso, es uno solo, supongamos A
$amigosArray = mysql_fetch_array($amigosSQL);
//Lo transformo en un array para poder usarlo con facilidad
$amigosArray[] = B;
//Agrego un valor extra

echo $amigosArray[0];
echo $amigosArray[1];
//A modo de debugeo, hice que los valores del array se escriban, de pasar de 1, en este caso, estoy saliendo del rango, asi que puedo asegurar que los datos son "A" y "B"
//Salida: AB


foreach ($amigosArray as $idATraer){

$sql = mysql_query("select dato1, dato2 from datos where Fecha <= '$fecha' and ID_Usuario = '$idATraer'");
//Quiero traer datos de la base de datos de acuerdo a las salidas que obtuve antes, asi que hago una llamada con los valores del foreach

echo $idATraer;
//De nuevo debugeando, hago que cada vez que se ejecute, imprima el valor que esta usando, y aca se produce el error porque repite dos veces el primer valor.
//Salida: AAB



Alguna idea de porque puede estar pasando esto?
De ser mas de dos datos, ejemplo A, B y C, la salida es AABC, asi que el problema es en el primer valor.

Saludooos
  #2 (permalink)  
Antiguo 02/09/2012, 21:41
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Mal funcionamiento Foreach

Casi te podría jurar (mi religión no me lo permite [PHPeismo] ) que foreach funciona correctamente, mostrando los elementos del array tal como lo creaste. Para corroborarlo basta que incluyas esta línea:

var_dump($amigosArray);

Entonces, las posibilidades son:
- Estás incluyendo dos veces el primer elemento
- Tienes por ahí algún otro echo para ese primer elemento
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 02/09/2012, 21:58
 
Fecha de Ingreso: mayo-2012
Mensajes: 20
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Mal funcionamiento Foreach

Es raro, porque la que crea la repetición, según pude ver comentando distintas lineas, son las primeras dos lineas cuando traigo los datos de la base de datos, porque si armo un array "a mano" con números, no sale nada repetido.

Lo cual agrega mas interrogantes, porque la tabla en la que estoy haciendo el query tiene dos columnas, "ID_Contacto" e "ID_Usuario", con dos filas que tienen los valores A C y C A.
En teoría "select ID_Contacto from relaciones where ID_Usuario = 'A'" debería dar C y "select ID_Contacto from relaciones where ID_Usuario = 'C'" debería dar A.
La verdad estoy bastante perdido.
Por el momento lo solucione haciendo que $amigosArray[0] = B; (si, en los echo "salia" bien por pantalla, pero parece que se no era asi, porque piso la posicion cero y estoy sacando uno de los valores repetidos). La verdad es que soy bastante obsesivo compulsivo con estas cosas y no me gusta que queden soluciones "magicas", asi que si a alguien se le ocurre una idea, escucho atento. Mientras tanto, seguire probando.

La verdad que es la primera vez que me pasa, revise los nombres de las variables, los cambie por si se repetian y nada


Edito con novedades:
Agregue dos lineas de var_dump($amigosArray), una antes de el query que crea problemas y una después.
La primera da NULL, así que pude descartar que la variable "traiga" valores viejos o de otros lados.
La segunda da: array(2) { [0]=> string(2) "56" ["ID_Contacto"]=> string(2) "56" }
Osea que es el propio query que trae dos valores, sin embargo el primero es "sin nombre". Todo muuuuuuuuuuuy raro. Ideas?

Última edición por gzanitti; 02/09/2012 a las 22:07 Razón: Novedades
  #4 (permalink)  
Antiguo 02/09/2012, 22:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Mal funcionamiento Foreach

Supongo que llenas el arreglo mediante un while:

Código PHP:
Ver original
  1. while(/* funcion para leer tu consulta, suponiendo que es $row = mysql_fetch_algo() */) {
  2.     // Lo agregas sólo si no existe ya en el array
  3.     if( ! in_array($amigosArray)) {
  4.         $amigosArray[] = $row['idContacto'];
  5.     }
  6. }
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 02/09/2012, 23:14
 
Fecha de Ingreso: mayo-2012
Mensajes: 20
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Mal funcionamiento Foreach

Al final, parece que bastaba con hacer mysql_fetch_assoc($amigosSQL); y que solo traiga los valores asociativos. De la otra forma, traia los arrays de las dos formas y los "pegaba"
  #6 (permalink)  
Antiguo 03/09/2012, 02:30
Avatar de Naguissa  
Fecha de Ingreso: junio-2008
Mensajes: 37
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Mal funcionamiento Foreach

Cita:
Iniciado por gzanitti Ver Mensaje
Al final, parece que bastaba con hacer mysql_fetch_assoc($amigosSQL); y que solo traiga los valores asociativos. De la otra forma, traia los arrays de las dos formas y los "pegaba"
mysql_fetch_array trae los datos con keys numeradas y en texto. Es posible que si unías arrays estuvieras leyendo los datos como [0] y como ['id_usuario'].

Etiquetas: foreach, repetidas, sql, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:04.