Foros del Web » Programando para Internet » PHP »

Extraño comportamiento de array_unique

Estas en el tema de Extraño comportamiento de array_unique en el foro de PHP en Foros del Web. Según el manual: Cita: array_unique (PHP 4 >= 4.0.1) array_unique -- Removes duplicate values from an array Description array array_unique ( array array) array_unique() takes ...
  #1 (permalink)  
Antiguo 11/06/2003, 03:56
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Extraño comportamiento de array_unique

Según el manual:

Cita:
array_unique

(PHP 4 >= 4.0.1)
array_unique -- Removes duplicate values from an array
Description
array array_unique ( array array)

array_unique() takes input array and returns a new array without duplicate values.
He probado:
Código PHP:
<?
$prova 
= array("1""2""3""4""5""5""4""3""2");
$prova array_unique($prova);

for (
$i=0$i<count($prova); $i++) {
    echo 
$prova[$i]."<br>";
}
?>
Y he obtenido:

Cita:
1
2
3
4
5
Perfecto.

Sin embargo, si hago:
Código PHP:
<?
$prova 
= array("1""5""5""4","2""3""4""5""5""4""3""2");
$prova array_unique($prova);

for (
$i=0$i<count($prova); $i++) {
    echo 
$prova[$i]."<br>";
}
?>
Obtengo:

Cita:
1
5

4
2
¿Qué le ha pasado al 3?
__________________
M a l d i t o F r i k i
  #2 (permalink)  
Antiguo 11/06/2003, 15:16
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 15 años
Puntos: 0
La función array_unique() se encarga de devolver una nueva matriz en la que no aparecen elementos repetidos. La nueva matriz mantiene las mismas claves que la matriz original, debiendo tener en cuenta que las claves de elementos borrados tendrán asociados valores nulos.
Cambia el nombre de la variable,
$prova2=array_unique($prova);
y los demas $prova por $prova2
  #3 (permalink)  
Antiguo 11/06/2003, 15:33
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Cocker puede tener razon. Usa var_dump() o print_r() para mostrar exactamente como esta el array. Puede que parte de la culpa la tenga count() que puede devolver "solo" el numero de elementos que no son NULL (que es lo que parece tiene ese elemento).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 11/06/2003, 15:37
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
En efecto, era eso.
Gracias
__________________
M a l d i t o F r i k i
  #5 (permalink)  
Antiguo 12/06/2003, 03:16
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Si pones error_reporting(E_ALL); veras que la salida que revices es:

1
5

Notice: Undefined offset: 2 in c:\apache\htdocs\php-pruebas\array_unique.php on line 6

4
2


Ahi esta el error
__________________
Usuario registrado de Linux #288725
  #6 (permalink)  
Antiguo 12/06/2003, 03:40
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Al final lo he solucionado con un simple foreach().
__________________
M a l d i t o F r i k i
  #7 (permalink)  
Antiguo 05/08/2006, 10:07
 
Fecha de Ingreso: junio-2006
Mensajes: 329
Antigüedad: 11 años, 6 meses
Puntos: 1
Muchachos, pero me pueden decir como decirle a PHP que me ordene de nueo el ARRAY para que me quede de nuevo
Código PHP:
Array
(
    [
0] => Array
    [
1] => hombre
    
[3] => ombre
    
[4] => omGbre
    
[5] => fombre
    
[6] => chombre
    
[7] => ombhre
    
[8] => acci&#243;n
    
[10] => axion
    
[11] => acion
    
[12] => acxion

Y no con "huecos" o indices INEXISTENTES:
Código PHP:
Array
(
    [
0] => Array
    [
1] => hombre
    
[3] => ombre
    
[5] => fombre
    
[10] => axion
    
[11] => acion
    
[12] => acxion

Aqui faltan el 6, 7, 8, 9 y 2.

Como hago para que la matriz se ordene y quede entonces indices desde el 0 hasta el 6 y no hasta el 12 ???????
  #8 (permalink)  
Antiguo 05/08/2006, 11:09
 
Fecha de Ingreso: junio-2006
Mensajes: 329
Antigüedad: 11 años, 6 meses
Puntos: 1
Ya lo resolvi!, solo debe hacerse un
Código PHP:
sort($array); 
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 18:36.