Foros del Web » Programando para Internet » PHP »

Unir muchos arrays y mostrar elementos únicos.

Estas en el tema de Unir muchos arrays y mostrar elementos únicos. en el foro de PHP en Foros del Web. Hola a todos, estoy haciendo una web de cine en la que me gustaría poder realizar lo siguiente. Tengo un registro llamado "reparto" el cual ...
  #1 (permalink)  
Antiguo 05/10/2010, 05:52
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 1 mes
Puntos: 3
Unir muchos arrays y mostrar elementos únicos.

Hola a todos, estoy haciendo una web de cine en la que me gustaría poder realizar lo siguiente.

Tengo un registro llamado "reparto" el cual contiene los nombres de los actores separados por una coma. Me gustaría hacer una función en la cual pudiera mostrar los nombres de todos los actores que tengo en mi BD, sin que se repitan.

Pongo un ejemplo:

En una película el campo reparto es:

" Marlon Brando, Al Pacino, James Caan, Robert Duvall, Diane Keaton, John Cazale"

y en otra:

" Al Pacino, John Cazale, Charles Durning, Carol Kane"

Y lo que quiero es que los nombres repetidos solo aparezcan una vez, quedando así:

"Marlon Brando, Al Pacino, Jonh Cazale, James Caan, Robert Duvall, Diane Keaton, Charles Durning, Carol Kane"

Es decir como Al Pacino y John Cazale están repetidos, pues solo se muestran una vez. Esto me gustaría hacerlo para todos los registros "reparto" de mi base de datos, es decir hacer una consulta, y si tengo 3000 películas, pues que me extraiga el nombre de todos los actores que hay en ellas y así tener una lista de todos los actores que hay sin repetirse. ¿Existe alguna manera?. He intentado con array_unique y explode pero no doy con la solución.

Gracias a todos.
  #2 (permalink)  
Antiguo 05/10/2010, 06:12
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Código PHP:
<?php

$ar 
= array('Pacino','Deniro','Lopez','Pepe');
$ar2 = array('Pacino','GOnzalez','Brando','Pepe');

$ar_temp array_merge($ar$ar2);
$ar_diff array_unique($ar_temp);
print_r($ar_diff);
?>
SALU2
  #3 (permalink)  
Antiguo 05/10/2010, 06:19
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Hola
ehm, pensando en que los actores pueden estar en N peliculas,
yo mejoraría el modelo de la base de datos teniendo una tabla
pelicula, otra actores, y otra reparto, y en esta reparto tendríamos
por cada pelicula su id y el id del actor que participo en ella, por ej

Código:
tabla peliculas
id nombre
1   El padrino
2   Escencia de mujer
3   Dick tracy

tabla actores
id nombre
1  Al pacino
2  Chris O'Donnell

tabla reparto
idpelicula idactor
1                  1
2                  1
2                  2
3                  1
por ej, y luego bastaría hacer la consulta con un join puede ser
entre estas 3 para obtener de una película en específico,
el reparto de la misma

espero te sirva la idea
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #4 (permalink)  
Antiguo 05/10/2010, 06:49
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Muchas gracias a los dos por responder.

Respecto a lo que propone mortiprogramador, es cierto que mejoraría el modelo de base de datos, pero debería cambiar todo lo que tengo hasta ahora, además sería muy costoso introducir cada película ya que tendría que saber el ID de cada actor y tardaría mucho tiempo en hacerlo.

En cuanto al código de repara2, como sería realizando una consulta con todos los registros?

Me explico, tengo una consulta tal que asi:

Código PHP:
$consulta mysql_query("SELECT DISTINCT reparto FROM peliculas");

while (
$resultado mysql_fetch_array($consulta)) { 
    
    
$reparto$resultado['reparto'];

    
$separar explode (','$reparto);


Corregidme si me equivoco, con eso tendría la consulta que me mostraría todos los campos "reparto" diferentes que hay en la tabla peliculas y con explode conseguiría un array con los nombres que estaban separados por comas, pero, ¿como uso ahora array_merge y array_unique?

Gracias de nuevo y un saludo.
  #5 (permalink)  
Antiguo 05/10/2010, 07:01
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Hola
ehm, pues claro, eso es cierto, por eso es que adicionalmente
se haría necesario un formulario de ingreso de peliculas, donde
se agregue el nombre de la película, y luego se pueda ya sea
ingresar actores (si son nuevos) o seleccionar actores (ya existentes en la bd)
por medio de un select (select de la bd y select html) donde se listen todos y se escojan los que se necesitan (pudiendolos buscar por la inicial del nombre dentro del select html) así sería mucho más rápido

solo ideas
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #6 (permalink)  
Antiguo 05/10/2010, 07:38
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Unir muchos arrays y mostrar elementos únicos.

rubio, no se entiene muy bien cuál es el obbetivo de esto. La solución correcta es la de morti, es decir, hacer una estructura de la DB y luego obtener la información exacta a través de selects con INNER u LEFT JOIN.
EL proceso con arrays puede ser posterior. Si posteas un par de tablas con datos te saco las selects. El esquema sería:

tabla peliculas
id
nombre
desc
director

tabla actores
id
nombre
...

tabla reparto
id_peli
id_actor
...

tabla directores
id_dire
id_peli

A ver si te animas y lo pones en marcha.
Un saludo
  #7 (permalink)  
Antiguo 05/10/2010, 09:49
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Gracias de nuevo a los dos por intentar ayudarme .

No se muy bien como explicarlo, pero la solución que plantea mortiprogramador desgraciadamente no me sirve.

La razón por la que quiero una lista con todos los nombres de actores, es para poder hacer una página automática que muestre todos los nombres y que a la vez sean un link para buscar todos los registros que contengan dicho nombre. Es decir si pincho sobre Clint Eastwood, que me muestre todas las películas en las que aparece.

Como los nombres están en un único campo separados por coma, lo que había pensado es separar los nombres de todos los registros con explode, luego juntarlos todos en un array y después mostrar sólo los que son únicos. Claro que no tengo ni idea si eso se puede hacer.

Mi base de datos actualmente solo tiene una tabla con los datos de las películas y es más o menos así

ID, titulo, director, fotografia, guion, pais, año, reparto, etc


Saludos
  #8 (permalink)  
Antiguo 05/10/2010, 10:05
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Hola
bueno, pues eso es mucho más lento como lo estas queriendo hacer que como yo te lo propongo....
pero pues bueno, así el asunto, ya tienes el explode, que haces por cada película, y luego tendrías que recorrer el explode (es decir, $separar)
ya sea en un foreach o en un for, y comparar cada elemento
CONTRA el actor que estas buscando

y si encuentra igualdad en alguno de esos elementos, que se vaya guardando esta coincidencia (el id de la pelicula) en un array nuevo

y así, se tendrían al finalizar todos los id de peliculas donde mr.eastwood
todo esto dentro del while que ya tienes

ahora, fuera del while se tendría que recorrer este nuevo array
(en otro for o foreach) y por cada elemento (es decir, cada id de película)
que haga una consulta a la bd con ese id de pelicula, y que vaya mostrandolos. todo esto dentro del nuevo for

pero como podrás apreciar, es más código
a realizar

espero te sirva la idea
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 06/10/2010, 12:22
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Muchas gracias de nuevo mortiprogramador, que conste que no lo hago como tu me dices, no por que yo sea un cabezón, sino porque ya tengo más de 10.000 películas introducidas y hacerlo como sugieres me llevaría años para modificarlo todo.

De todas formas seguiré buscando la forma de hacer lo que tenía en mente en un principio y si lo consigo lo postearé aquí.

Si alguien tiene alguna otra sugerencia, será bienvenida.

Saludos a todos.
  #10 (permalink)  
Antiguo 06/10/2010, 17:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Cita:
Iniciado por mortiprogramador Ver Mensaje
Hola
bueno, pues eso es mucho más lento como lo estas queriendo hacer que como yo te lo propongo....
pero pues bueno, así el asunto, ya tienes el explode, que haces por cada película, y luego tendrías que recorrer el explode (es decir, $separar)
ya sea en un foreach o en un for, y comparar cada elemento
CONTRA el actor que estas buscando

y si encuentra igualdad en alguno de esos elementos, que se vaya guardando esta coincidencia (el id de la pelicula) en un array nuevo

y así, se tendrían al finalizar todos los id de peliculas donde mr.eastwood
todo esto dentro del while que ya tienes

ahora, fuera del while se tendría que recorrer este nuevo array
(en otro for o foreach) y por cada elemento (es decir, cada id de película)
que haga una consulta a la bd con ese id de pelicula, y que vaya mostrandolos. todo esto dentro del nuevo for

pero como podrás apreciar, es más código
a realizar

espero te sirva la idea
saludos
bueno, pues con un craneado proceso de migración no hay tanto problema en hacerlo

por otro lado, probaste esto que te comente para lo que ya tienes????
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 07/10/2010, 00:57
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Tomando en cuenta la cantidad de películas que dices tener en la BD, el proceso que quieres realizar en la forma que pides ni si quiera le va dar tiempo al servidor verificar una por una cada película, en este caso no te queda mas que migrar la información ya que tu logia esta muy mal implementada (con la pena), desde un comienzo debiste de separar en campos los actores de las películas...

Si las películas fueran menos en numero posiblemente te funcionaria, pero al ser demasiadas tardará mucho el script en procesar todo, recuerda que PHP tiene un limite de tiempo, si el script sobrepasa este limite se detiene la ejecución y te dejará la ventana en blanco, sin contar el consumo de procesador que vas a realizar, por lo cual también es posible obtener una sanción por parte de tu hosting
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #12 (permalink)  
Antiguo 07/10/2010, 03:59
 
Fecha de Ingreso: marzo-2010
Mensajes: 128
Antigüedad: 14 años, 1 mes
Puntos: 3
Respuesta: Unir muchos arrays y mostrar elementos únicos.

Gracias de nuevo a los dos. Se que el sistema que tengo actualmente no es ni mucho menos el ideal, el problema es que migré los datos desde WordPress, que es un sistema que no está pensado para lo que yo quería, y claro ahora me encuentro con estos problemas. De todas formas voy a ver si consigo hacer un script en el que pueda pasar los datos a la estructura que propone mortiprogramador.

Ya os contaré!!

Saludos.

Etiquetas: arrays, elementos, muchos, unir
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 21:53.