Foros del Web » Programando para Internet » PHP »

Dividir un arreglo en dos

Estas en el tema de Dividir un arreglo en dos en el foro de PHP en Foros del Web. Hola!!, tengo una situación con un arreglo que no he podido resolver y me estoy haciendo líos, acudo a ustedes porque no sé como resolverlo. ...
  #1 (permalink)  
Antiguo 07/07/2011, 12:38
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 1 mes
Puntos: 1
Dividir un arreglo en dos

Hola!!, tengo una situación con un arreglo que no he podido resolver y me estoy haciendo líos, acudo a ustedes porque no sé como resolverlo.

La situación es que tengo un arreglo como:

matriz1[0]=("clave"=>'001', "nombre"=>'Juan', "edad"=>23, "actividad"=>'Lectura');
matriz1[1]=("clave"=>'009', "nombre"=>'Alberto', "edad"=>25, "actividad"=>'Deportes');
matriz1[2]=("clave"=>'003', "nombre"=>'Raúl', "edad"=>20, "actividad"=>'Música');
matriz1[3]=("clave"=>'012', "nombre"=>'Miguel', "edad"=>24, "actividad"=>'Lectura');
matriz1[4]=("clave"=>'001', "nombre"=>'Juan', "edad"=>23, "actividad"=>'Música');
matriz1[5]=("clave"=>'012', "nombre"=>'Miguel', "edad"=>24, "actividad"=>'Deportes');
matriz1[6]=("clave"=>'001', "nombre"=>'Juan', "edad"=>23, "actividad"=>'Enfermería');


De este arreglo debo obtener un arreglo que almacene los registros sin repetir, que quede:

matriz1[0]=("clave"=>'001', "nombre"=>'Juan', "edad"=>23, "actividad"=>'Lectura');
matriz1[1]=("clave"=>'009', "nombre"=>'Alberto', "edad"=>25, "actividad"=>'Deportes');
matriz1[2]=("clave"=>'003', "nombre"=>'Raúl', "edad"=>20, "actividad"=>'Música');
matriz1[3]=("clave"=>'012', "nombre"=>'Miguel', "edad"=>24, "actividad"=>'Lectura');


Y obtener otro arreglo que almacene a los que se repitieron, debe quedar:

matriz1[4]=("clave"=>'001', "nombre"=>'Juan', "edad"=>23, "actividad"=>'Música');
matriz1[5]=("clave"=>'012', "nombre"=>'Miguel', "edad"=>24, "actividad"=>'Deportes');
matriz1[6]=("clave"=>'001', "nombre"=>'Juan', "edad"=>23, "actividad"=>'Enfermería');


Desde ya muchas gracias por su atención y ayuda.
  #2 (permalink)  
Antiguo 07/07/2011, 12:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Dividir un arreglo en dos

Puedes usar las funciones de array para conseguir lo que necesitas.

Te sugiero investigar el manual:
http://www.php.net/manual/en/language.types.array.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/07/2011, 13:12
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 1 mes
Puntos: 1
Respuesta: Dividir un arreglo en dos

Gracias pateketrueke, si he estado leyendo algunas funciones y creo que no aplican a lo que requiero o no he dado con la función que corresponde, por lo cual me dijé "no hay función sobre arreglos que se aplique a lo requiero" e inicié a hacer comparaciones con foreach e if, pero tarda muchísimo en resolver y realmente no sé si devuelva resultados correctos, porque me devuelve error de tiempo agotado.

Es por eso que acudí a este foro. Y sigo investigando.
  #4 (permalink)  
Antiguo 07/07/2011, 13:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Dividir un arreglo en dos

Bueno, no existen funciones que cumplen exactamente lo que deseamos.

Por eso debes emplear tu ingenio, de ahí viene el término de ingeniería.

- El primer paso es obtener los elementos que no se repiten, puedes usar array_unique() para obtener los elementos únicos del array.
- Con el array de elementos únicos haces un array_diff() con el array original, y así obtienes las diferencias entre ambos.

Ahí tienes, un array con lo elementos no repetidos, y otro con los repetidos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/07/2011, 13:39
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Dividir un arreglo en dos

el campo clave podria ser un parametro para saber si estan o no repetidos? o a fuerzas debes revisar todos los datos de la fila en curso?
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #6 (permalink)  
Antiguo 07/07/2011, 15:32
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 22 años, 1 mes
Puntos: 1
Respuesta: Dividir un arreglo en dos

Paketrueke, lo que pasa es que no puedo usar el array_unique porque no quiero obtener los elementos únicos del arreglo, por ejemplo en el array original debo obtener:

matriz1[0]=("clave"=>'001', "nombre"=>'Juan', "edad"=>23, "actividad"=>'Lectura');
matriz1[1]=("clave"=>'009', "nombre"=>'Alberto', "edad"=>25, "actividad"=>'Deportes');
matriz1[2]=("clave"=>'003', "nombre"=>'Raúl', "edad"=>20, "actividad"=>'Música');
matriz1[3]=("clave"=>'012', "nombre"=>'Miguel', "edad"=>24, "actividad"=>'Lectura');

y con array_unique omitiría el registro que corresponde a Juan y Miguel porque estos se repiten.

Y respecto a la pregunta de mogurbon si sólamente con la clave

Gracias
  #7 (permalink)  
Antiguo 07/07/2011, 15:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Dividir un arreglo en dos

Entonces es necesario que iteres el arreglo y hagas las comparaciones necesarias para separar los datos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 07/07/2011, 16:43
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Dividir un arreglo en dos

Código PHP:
Ver original
  1. #pseudocodigo
  2. #crear arreglo unicamentede indices
  3.  
  4. foreach{
  5.     $arregloindices=$arregloprincipal["indice"];
  6. }  
  7. # utiliza las funciones que te corrieron para obtener dos arreglos de indices, uno de repetidos y otro de no repetidos
  8.  
  9.  
  10.  
  11. for($fila =0 ;$fila<$numelementosmatrizprincipal;$fila++){#consulta la funcion in_array
  12.     si el indice esta en repetidos
  13.         $arreglorepetidos[$fila]=$arregloprincipal[$fila]
  14.     si esta en norepetidos
  15.         $arreglonorepetidos[$fila]=$arregloprincipal[$fila]
  16. }
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo

Etiquetas: dividir, arreglos
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 20:02.