Foros del Web » Programando para Internet » PHP »

problema al crear un array

Estas en el tema de problema al crear un array en el foro de PHP en Foros del Web. Tengo el siguiente método, consiste en pasarle dos parámetros atrapados de la API de Twitter. Estos dos parámetros son por un lado la lista de ...
  #1 (permalink)  
Antiguo 19/09/2013, 08:26
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
problema al crear un array

Tengo el siguiente método, consiste en pasarle dos parámetros atrapados de la API de Twitter. Estos dos parámetros son por un lado la lista de amigos (gente a la que el usuario sigue en twitter) y por el otro lado la lista de seguidores (gente que sigue al usuario).

Para crear una lista consistente de usuarios que vean sus publicaciones entre si tengo que contrastar ambas listas y escoger solamente los usuarios comunes entre las dos listas.

Código PHP:
Ver original
  1. //$this->result está declarada al principio de la clase como private $result = array();
  2.     public function gettruefriendslist ( $stdclassfriends, $stdclassfollowers )
  3.     {      
  4.         $a = 1;
  5.         foreach ( $stdclassfriends as $key)
  6.         {
  7.             foreach( $stdclassfollowers as $key2 )
  8.             {
  9.                 if ( $key->name == $key2->name )
  10.                 {
  11.                     $b = 1;
  12.                     $this->result[$a][$b] = $key->id;
  13.                     $this->result[$a][$b++] = $key->name;
  14.                     $this->result[$a][$b++] = $key->screen_name;
  15.                     $this->result[$a][$b++] = $key->profile_background_image_url;
  16.                     $a++;
  17.                    
  18.                    
  19.                 }
  20.             }
  21.         }
  22.         $this->result = array_unique( $this->result );
  23.        
  24.         return $this->result;
  25.     }

El problema con este método es que solo se graban los datos de un usuario, no de todos los comunes.

No devuelve ningún error, simplemente solo guarda los datos de un usuario.

En cambio, si lo hago de la siguiente manera sí me guarda un dato de cada usuario común. Pero yo quiero guardar varios datos, en un array por cada usuario común.

Código PHP:
Ver original
  1. foreach ( $stdclassfriends as $key)
  2.         {
  3.             foreach( $stdclassfollowers as $key2 )
  4.             {
  5.                 if ( $key->name == $key2->name )
  6.                 {
  7.                     array_push( $this->result, $key->name );
  8.                 }
  9.             }
  10.         }

¿Alguien me puede ayudar a enteder el problema y a solucionarlo?
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 19/09/2013, 16:45
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: problema al crear un array

Lo único que no acaba de convencerme es que por cada iteración de los amigos recorres todos los seguidores. Se me ocurre que podrías crear un array de amigos con solo el nombre, algo como:

Código PHP:
Ver original
  1. $this->result = array();
  2.  
  3. // Creas el array de amigos
  4. $friends = array();
  5. foreach($stdclassfriends as $key) {
  6.        $friends[] = $key->name;
  7. }
  8.  
  9. // Recorres solo una vez el de seguidores
  10. foreach($stdclassfollowers as $key) {
  11.       // Si existe en amigos, lo agregas al resultado
  12.       if(in_array($key->name, $friends)) {
  13.               // Con array push
  14.               array_push($this->result, array($key->name, 'otro dato', 'otro dato', 'bla bla bla'));
  15.               // O con asignación directa
  16.               $this->result[] = array($key->name, 'otro dato', 'otro dato', 'bla bla bla');
  17.       }
  18. }
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 19/09/2013, 18:25
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: problema al crear un array

Cita:
Iniciado por Triby Ver Mensaje
Lo único que no acaba de convencerme es que por cada iteración de los amigos recorres todos los seguidores. Se me ocurre que podrías crear un array de amigos con solo el nombre, algo como:

Código PHP:
Ver original
  1. $this->result = array();
  2.  
  3. // Creas el array de amigos
  4. $friends = array();
  5. foreach($stdclassfriends as $key) {
  6.        $friends[] = $key->name;
  7. }
  8.  
  9. // Recorres solo una vez el de seguidores
  10. foreach($stdclassfollowers as $key) {
  11.       // Si existe en amigos, lo agregas al resultado
  12.       if(in_array($key->name, $friends)) {
  13.               // Con array push
  14.               array_push($this->result, array($key->name, 'otro dato', 'otro dato', 'bla bla bla'));
  15.               // O con asignación directa
  16.               $this->result[] = array($key->name, 'otro dato', 'otro dato', 'bla bla bla');
  17.       }
  18. }
Ha funcionado a la primera

Simplemente me he llevado dos satisfacciones, haberlo podido resolver y además gracias a ti he aprendido una nueva manera de iterar para contrastar.

Lo de anidar dos foreach es como me enseñaron a hacerlo.

Jamás se me habría ocurrido la manera como tú lo has hecho.

Muchas gracias, mil gracias!!! :D

EDITO

Ahora al hacer pruebas posteriores sobre por qué mi código no funcionaba (soy así de cabezota, me gusta entender el máximo que pueda de cada cosa del código :P ), resulta que era por la siguiente línea

Código PHP:
Ver original
  1. $this->result = array_unique( $this->result );

No entiendo por qué, se supone que eso es para quitar cualquier duplicado dentro del array, en este caso es para asegurarme de que no haya de ninguna manera datos duplicados, pero tiene ese efecto y no lo entiendo :S
__________________
Ayúdame a hacerlo por mi mismo.

Última edición por guardarmicorreo; 19/09/2013 a las 18:31

Etiquetas: usuarios
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 14:20.