Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   Dividir un arreglo en dos (http://www.forosdelweb.com/f18/dividir-arreglo-dos-927444/)

Serenity 07/07/2011 12:38

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.

pateketrueke 07/07/2011 12:41

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

Serenity 07/07/2011 13:12

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.

pateketrueke 07/07/2011 13:24

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. ;-)

mogurbon 07/07/2011 13:39

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?

Serenity 07/07/2011 15:32

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

pateketrueke 07/07/2011 15:41

Respuesta: Dividir un arreglo en dos
 
Entonces es necesario que iteres el arreglo y hagas las comparaciones necesarias para separar los datos. :policia:

mogurbon 07/07/2011 16:43

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. }


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2014, Jelsoft Enterprises Ltd.

SEO by vBSEO 3.3.2