Foros del Web » Programando para Internet » PHP »

Cómo puedo aplicar array_unique en este caso?

Estas en el tema de Cómo puedo aplicar array_unique en este caso? en el foro de PHP en Foros del Web. Hola, yo traigo desde un csv datos de la siguiente forma: Código PHP: campo1 ; campo2 campo1 ; campo2  De esos campos me interesa solamente ...
  #1 (permalink)  
Antiguo 16/01/2014, 09:41
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Cómo puedo aplicar array_unique en este caso?

Hola,

yo traigo desde un csv datos de la siguiente forma:
Código PHP:
campo1;campo2
campo1
;campo2 
De esos campos me interesa solamente el campo1 y que no se repita, entonces le hago un explode en el ";" y me lo separa de la forma
Código PHP:
Array
(
    [
0] => 28850
    
[1] => 680241436

)
Array
(
    [
0] => 28850
    
[1] => 680241436


entonces me interesa unicamente el indice [1] y q no se repita.

Mi pregunta es: como puedo aplicarle array_unique solo a ese indice?

Necesitaria volver a introducir esos datos en un nuevo array y q me quede de la forma:
Código PHP:
(
    [
0] => 680241436
    
[1] => 680241436


y recien ahi puedo aplicarle array_unique.

Pero despues como hago para eliminar tambien el campo2 q esta asociado a ese campo1?

En resumen, quiero eliminar los datos duplicados usando array_unique()


Alguna ayuda?

Gracias
  #2 (permalink)  
Antiguo 16/01/2014, 10:05
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Cómo puedo aplicar array_unique en este caso?

Muestra todo el código que tienes actualmente.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 16/01/2014, 10:14
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Cómo puedo aplicar array_unique en este caso?

Cita:
Iniciado por jonni09lo Ver Mensaje
Muestra todo el código que tienes actualmente.

Saludos
Estoy haciendo esto:

El csv tiene estos datos:
son 4 lineas pero se repiten 2
Código PHP:
08840;626584520
28850
;680241436
08840
;626584520
28850
;680241436 
Este es el codigo con el q estoy probando:
Código PHP:
    $fp fopen("rows.csv" "r" );

    while(!
feof($fp))
    {
        
$linea trim(fgets($fp), ' \t\n\r\0\x0B');
        
        
$linea_explode explode(";"$linea);
        
$cp    $linea_explode[0];
        
$movil $linea_explode[1];
        
        
$movil_clean[] = trim($movil' \t\n\r\0\x0B');
        
$unique array_values(array_unique($movil_clean));
        
        
print_r($unique);

    }
    
fclose $fp ); 
Eso me esta devolviendo esto exactamente:
Código PHP:
Array
(
    [
0] => 626584520

)
Array
(
    [
0] => 626584520

    
[1] => 680241436

)
Array
(
    [
0] => 626584520

    
[1] => 680241436

)
Array
(
    [
0] => 626584520

    
[1] => 680241436

)
PHP Notice:  Undefined offset1 in /home/administrador/Descargas/tarea-110-desduplicar-cp/prueba/csv-desduplicate-prueba.php on line 12
Array
(
    [
0] => 626584520

    
[1] => 680241436

    
[2] => 

Me devuelve bien solamente 2, ya q los otros 2 se repiten.
Lo q no entiendo es por q me lo devuelve de esa forma, con tantos arrays.


Entonces tengo dos valores unicos:
[0] => 626584520
[1] => 680241436

pero los quiero volver a juntar con el campo1 q le corresponde a cada uno, o sea q el resultado final tendria q ser el siguiente:
Código PHP:
08840;626584520
28850
;680241436 

No se si se entendio lo q quiero hacer

Última edición por reborn; 16/01/2014 a las 10:31
  #4 (permalink)  
Antiguo 16/01/2014, 10:33
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Cómo puedo aplicar array_unique en este caso?

Bueno tomando de referencia esto último que dices

Cita:
Pero despues como hago para eliminar tambien el campo2 q esta asociado a ese campo1?

En resumen, quiero eliminar los datos duplicados usando array_unique()
Puedes hacer algo así:

Código PHP:
Ver original
  1. <?php
  2. $fp = fopen("rows.csv" , "r" );
  3. $aux = array();
  4. while(!feof($fp))
  5. {
  6.     $linea = trim(fgets($fp), ' \t\n\r\0\x0B');
  7.     list($cp, $movil) = explode(";", $linea);
  8.     if( !in_array($cp, $aux ){
  9.         $aux[] = array( $cp, $aux );
  10.         //aqui iria el fputs si así lo deseas...
  11.     }
  12. }
  13.  
  14. print_r($aux);
  15.  
  16. fclose ( $fp );
  17.  
  18. ?>

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 16/01/2014, 11:07
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Cómo puedo aplicar array_unique en este caso?

Cita:
Iniciado por jonni09lo Ver Mensaje
Puedes hacer algo así:

Código PHP:
Ver original
  1. <?php
  2. $fp = fopen("rows.csv" , "r" );
  3. $aux = array();
  4. while(!feof($fp))
  5. {
  6.     $linea = trim(fgets($fp), ' \t\n\r\0\x0B');
  7.     list($cp, $movil) = explode(";", $linea);
  8.     if( !in_array($cp, $aux ){
  9.         $aux[] = array( $cp, $aux );
  10.         //aqui iria el fputs si así lo deseas...
  11.     }
  12. }
  13.  
  14. print_r($aux);
  15.  
  16. fclose ( $fp );
  17.  
  18. ?>

Saludos
Eso me devuelve lo siguiente:
Código PHP:
Array
(
    [
0] => Array
        (
            [
0] => 8840
            
[1] => Array
                (
                )

        )

    [
1] => Array
        (
            [
0] => 28850
            
[1] => Array
                (
                    [
0] => Array
                        (
                            [
0] => 8840
                            
[1] => Array
                                (
                                )

                        )

                )

        )

    [
2] => Array
        (
            [
0] => 8840
            
[1] => Array
                (
                    [
0] => Array
                        (
                            [
0] => 8840
                            
[1] => Array
                                (
                                )

                        )

                    [
1] => Array
                        (
                            [
0] => 28850
                            
[1] => Array
                                (
                                    [
0] => Array
                                        (
                                            [
0] => 8840
                                            
[1] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        ) 
Lo acorte por la cantidad de caracteres
  #6 (permalink)  
Antiguo 16/01/2014, 11:58
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Cómo puedo aplicar array_unique en este caso?

Llegue a lo siguiente:

Código PHP:
    $fp fopen("rows.csv" "r" );

    while(!
feof($fp))
    {
        
$linea trim(fgets($fp), ' \t\n\r');
        
        
$linea_explode explode(";"$linea);
        
$cp    $linea_explode[0];
        
$movil $linea_explode[1];
        
        
$movil_clean[] = trim($movil' \t\n\r');
        
$movil_unique array_unique($movil_clean);
        
        
$cp_clean[] = trim($cp' \t\n\r');

    }
    
print_r($movil_unique);
    
print_r($cp_clean);

    
fclose $fp ); 
Separo movil y cp en dos arrays por separado.
Eso me devuelve el movil unico (desduplicado) conservando el mismo el indice, al igual q el cp.

Código PHP:

Array
(
    [
0] => 626584520

    
[1] => 680241436

    
[4] => 
)
Array
(
    [
0] => 08840
    
[1] => 28850
    
[2] => 08840
    
[3] => 28850
    
[4] => 


De ahi me quedaria unir esos valores por sus indices, ya q se siguen manteniendo.

El tema es, como llego a eso?

Y el resultado parcial seria
Código PHP:
08840;626584520
28850
;680241436
08840
;//limpiar
28850;//limpiar 
y me quedaria limpiar eso y obtener algo como esto

Código PHP:
08840;626584520
28850
;680241436 

Creo q me la estoy complicando mucho

Etiquetas: Ninguno
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 19:15.