Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO recorrer array y eliminar repetidos

Estas en el tema de recorrer array y eliminar repetidos en el foro de PHP en Foros del Web. Buen dia amigos. Necesito su ayuda. Tengo que recorrer este arreglo: Código: Array ( [1] => Array ( [item_kit_id] => 6, [nombre_kit] => Kit con ...
  #1 (permalink)  
Antiguo 25/06/2014, 10:08
 
Fecha de Ingreso: julio-2008
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 2
Pregunta recorrer array y eliminar repetidos

Buen dia amigos.

Necesito su ayuda.

Tengo que recorrer este arreglo:

Código:
Array ( 
	[1] => Array ( 
		[item_kit_id] => 6, [nombre_kit] => Kit con 2 articulos, [item_id] => 1,[quantity] => 1) 
	[2] => Array ( 
		[item_kit_id] => 6, [nombre_kit] => Kit con 2 articulos, [item_id] => 2,[quantity] => 2)
	[3] => Array ( 
		[item_kit_id] => 5, [nombre_kit] => Kit con 3 articulos, [item_id] => 3,[quantity] => 1) 
	[4] => Array ( 
		[item_kit_id] => 5, [nombre_kit] => Kit con 3 articulos, [item_id] => 4,[quantity] => 2) 
	[5] => Array ( 
		[item_kit_id] => 5, [nombre_kit] => Kit con 3 articulos, [item_id] => 5,[quantity] => 3) 
)
si ven son 5 lineas, pero son referente a dos kits de articulos, necesito que me devuelva solo una linea de cada kit, y no logro hacer esa comparación. Necesitaría que quede algo como esto:
Código:
Array ( 
	[1] => Array ( 
		[item_kit_id] => 6, [nombre_kit] => Kit con 2 articulos, [item_id] => 1,[quantity] => 1) 
	[3] => Array ( 
		[item_kit_id] => 5, [nombre_kit] => Kit con 3 articulos, [item_id] => 3,[quantity] => 1) 
)
He intentado hacerlo con un foreach:
Código PHP:
$cart_ordenado=$cart_combos;
foreach (
$cart_combos as $k1 => $v1) {
    foreach (
$cart_ordenado as $key => $value) {
        if (
$value['item_kit_id']==$v1['item_kit_id']) {
            unset(
$cart_combos[$k1]);
            echo 
"Son iguales";
        }else{
            echo 
"no son iguales";
        }
    }
}
print_r($cart_combos); 
Pero en realidad no se como armar la condición dentro del if.

Solo me interesa comparar item_kit_id, pero no logro obtener el resultado que necesito.

Alguna sugerencia.

Desde ya muchas gracias

Última edición por jglm210687; 25/06/2014 a las 10:51
  #2 (permalink)  
Antiguo 25/06/2014, 11:09
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: recorrer array y eliminar repetidos

http://www.php.net/manual/es/function.array-unique.php
__________________
Ayúdame a hacerlo por mi mismo.
  #3 (permalink)  
Antiguo 25/06/2014, 11:13
Avatar de a n g e l u s  
Fecha de Ingreso: enero-2006
Ubicación: Chile
Mensajes: 237
Antigüedad: 18 años, 3 meses
Puntos: 1
Respuesta: recorrer array y eliminar repetidos

Hola jglm210687

Al interpretar tu idea, creo que te estas enfocando en rehacer la rueda, ya que existen funciones que ya existen y las puedes ocupar para solucionar tu problema. Solo dale otro enfoque a lo que buscas.

Mira existen estas funciones

array_diff
http://www.php.net/manual/es/function.array-diff.php
Calcula la diferencia entre arrays, y te genera un array con todo lo diferente

array_diff_assoc
http://php.net//manual/es/function.array-diff-assoc.php
Calcula la diferencia entre arrays con un chequeo adicional de índices

Puedes recorrer el array y si encuentra diferencias guardalo, asi puedes tener un array unico.

Existen otras opciones pero para eso te sugiero leer el manual o buscar en google como lo hice yo.

Espero haberte ayudado.
__________________
Atte,
A n g e l u s
Concepción - Chile
más vale respuestas bien pensadas, que 7000 post
  #4 (permalink)  
Antiguo 25/06/2014, 11:16
 
Fecha de Ingreso: julio-2008
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 2
Pregunta Respuesta: recorrer array y eliminar repetidos

Cita:
Al usar array_unique() me retorna solo el primer registro, y debería de mostrarme 2, el item_kit_id 5 y 6
  #5 (permalink)  
Antiguo 25/06/2014, 11:24
 
Fecha de Ingreso: julio-2008
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 2
Exclamación Respuesta: recorrer array y eliminar repetidos

Cita:
Iniciado por a n g e l u s Ver Mensaje
Hola jglm210687

Al interpretar tu idea, creo que te estas enfocando en rehacer la rueda, ya que existen funciones que ya existen y las puedes ocupar para solucionar tu problema. Solo dale otro enfoque a lo que buscas.

Mira existen estas funciones

array_diff
http://www.php.net/manual/es/function.array-diff.php
Calcula la diferencia entre arrays, y te genera un array con todo lo diferente

array_diff_assoc
http://php.net//manual/es/function.array-diff-assoc.php
Calcula la diferencia entre arrays con un chequeo adicional de índices

Puedes recorrer el array y si encuentra diferencias guardalo, asi puedes tener un array unico.

Existen otras opciones pero para eso te sugiero leer el manual o buscar en google como lo hice yo.

Espero haberte ayudado.
Gracias por responder, pero no consigo usar esas funciones php, creo que estas solo trabajan con los indices de array de una dimension. Yo estoy tratando de comparar con el indice de una segunda dimencion ya que el array no es lineal, y por eso creo que no trato de rehacer la rueda, no encuentro referencia a este dato.

Seguire intentando
  #6 (permalink)  
Antiguo 25/06/2014, 11:33
Avatar de edgarisrael1992  
Fecha de Ingreso: junio-2013
Mensajes: 54
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: recorrer array y eliminar repetidos

Me viene a la idea usar otro arreglo en el cual vallas pasando los artículos que quieres que no sean repetidos.

no se como recibas los datos, pero si los recibes de una base de datos puedes hacer una consulta en la cual no te los repita. me parece que la mejor opción es no permitir artículos iguales entrantes.
  #7 (permalink)  
Antiguo 25/06/2014, 11:39
 
Fecha de Ingreso: julio-2008
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 2
Exclamación Respuesta: recorrer array y eliminar repetidos

Cita:
Iniciado por edgarisrael1992 Ver Mensaje
Me viene a la idea usar otro arreglo en el cual vallas pasando los artículos que quieres que no sean repetidos.

no se como recibas los datos, pero si los recibes de una base de datos puedes hacer una consulta en la cual no te los repita. me parece que la mejor opción es no permitir artículos iguales entrantes.
El tema es que el item_kit_id se repite porque al ser un combo hay mas de un articulo en el, pero no quiero mostrar todos los items del combo, solo un item de cada combo.

No se como hacer
  #8 (permalink)  
Antiguo 25/06/2014, 11:42
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: recorrer array y eliminar repetidos

Se me ocurre una solución poco ortodoxa y bastante mejorable (la hice apurado, me están esperando ):

Código PHP:
Ver original
  1. //$array es tu array multidimensional
  2. $aux = array();
  3. $final = array();
  4. foreach ($array as $arr)
  5.     if (!in_array($arr['item_kit_id'], $aux)){
  6.         $aux[] = $arr['item_kit_id'];  
  7.         $final[] = $arr;
  8.     }
  9. print_r($final);

El resultado de esto es el siguiente:

Código HTML:
Ver original
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [item_kit_id] => 6
  6.             [nombre_kit] => Kit con 2 artículos
  7.             [item_id] => 1
  8.             [quantity] => 1
  9.         )
  10.  
  11.     [1] => Array
  12.         (
  13.             [item_kit_id] => 5
  14.             [nombre_kit] => Kit con 3 artículos
  15.             [item_id] => 3
  16.             [quantity] => 1
  17.         )
  18. )

Para esto estoy usando 3 arrays: el tuyo, un array en donde guardaré los id de cada array hijo y el array final. Recorro al array padre y en cada iteración, verifico si el id del array hijo actual (en el bucle) no ha sido insertado en el array auxiliar, de ser así, lo inserto y también al array hijo en el array final. De este modo, evito tener arrays hijos con id repetido en el array final.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 25/06/2014, 12:05
 
Fecha de Ingreso: julio-2008
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 2
De acuerdo Respuesta: recorrer array y eliminar repetidos

Cita:
Iniciado por Alexis88 Ver Mensaje
Se me ocurre una solución poco ortodoxa y bastante mejorable (la hice apurado, me están esperando ):

Código PHP:
Ver original
  1. //$array es tu array multidimensional
  2. $aux = array();
  3. $final = array();
  4. foreach ($array as $arr)
  5.     if (!in_array($arr['item_kit_id'], $aux)){
  6.         $aux[] = $arr['item_kit_id'];  
  7.         $final[] = $arr;
  8.     }
  9. print_r($final);

El resultado de esto es el siguiente:

Código HTML:
Ver original
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [item_kit_id] => 6
  6.             [nombre_kit] => Kit con 2 artículos
  7.             [item_id] => 1
  8.             [quantity] => 1
  9.         )
  10.  
  11.     [1] => Array
  12.         (
  13.             [item_kit_id] => 5
  14.             [nombre_kit] => Kit con 3 artículos
  15.             [item_id] => 3
  16.             [quantity] => 1
  17.         )
  18. )

Para esto estoy usando 3 arrays: el tuyo, un array en donde guardaré los id de cada array hijo y el array final. Recorro al array padre y en cada iteración, verifico si el id del array hijo actual (en el bucle) no ha sido insertado en el array auxiliar, de ser así, lo inserto y también al array hijo en el array final. De este modo, evito tener arrays hijos con id repetido en el array final.

Saludos

Muchas gracias Alexis88 fue la solución. Muchas gracias. Ya te di +1 en tu comentario.
  #10 (permalink)  
Antiguo 25/06/2014, 16:07
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: recorrer array y eliminar repetidos

Una solución muy simple:
Código PHP:
Ver original
  1. $result=array();
  2. foreach($array as $arr)
  3.    $result[$arr["item_kit_id"]]=$arr;
  4.  
  5. // Si te quieres deshacer de las claves
  6. $result=array_values($result);

Etiquetas: arrays
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 09:31.