Foros del Web » Programando para Internet » PHP »

como hacer nuevo array sin reg. duplicados

Estas en el tema de como hacer nuevo array sin reg. duplicados en el foro de PHP en Foros del Web. Ayuda Como decirle a un erray que me muestre un registro sin regitros duplicador. $a[] = "Casa"; $a[] = "Casa"; $a[] = "Arbol"; $a[] = ...
  #1 (permalink)  
Antiguo 17/03/2003, 15:15
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
como hacer nuevo array sin reg. duplicados

Ayuda
Como decirle a un erray que me muestre un registro sin regitros duplicador.

$a[] = "Casa";
$a[] = "Casa";
$a[] = "Arbol";
$a[] = "Arbol";

Nuevo ARRAY

$b[] = "Casa";
$b[] = "Arbol";

Saludos
  #2 (permalink)  
Antiguo 17/03/2003, 15:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Usando por ejemplo la función in_array() .. la cual determina si existe o no un valor en el array q le indicas (equivaldría a recorrer el array y aplicar un condicional sobre el valor del inice q está recorriendo con el que quieres comparar).

Código PHP:
<?
$array_origen
[] = "Casa";
$array_origen[] = "Casa";
$array_origen[] = "Arbol";
$array_origen[] = "Arbol";

$array_destino=array();
foreach (
$array_origen as $valor)){
   if (!
in_array($valor,$array_destino){
      
$array_destino[]=$valor;
   }
}

// ejemplo Leer el array generado ..
foreach ($array_destino as $valor){
echo 
$valor."<br>";
}
?>
Este proceso con arrays "grandes" podría demorar bastante tiempo en ejecutarse .. ten en cuenta que siempre se recorre el array destino por cada elemento del orgien array ..

Un saludo,
  #3 (permalink)  
Antiguo 17/03/2003, 15:33
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Me da error en esta linea.

if (!in_array($valor,$array_destino){
  #4 (permalink)  
Antiguo 17/03/2003, 15:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
le fatal un ) antes del } .. revisa el código nuevamente pues lo corregí ..

(y cuando digas "me dá error" di que error textual da PHP .. Eso en general ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 17/03/2003, 15:44
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Mira Cluster,

El error emitido és,

Parse error: parse error, unexpected '{' in

en la linea

<?
$array_origen[] = "Casa";
$array_origen[] = "Casa";
$array_origen[] = "Arbol";
$array_origen[] = "Arbol";

$array_destino=array();
foreach ($array_origen as $valor){
if (!in_array($valor,$array_destino){ $array_destino[]=$valor;
}
}

// ejemplo Leer el array generado ..
foreach ($array_destino as $valor){
echo $valor."<br>";
}
?>
  #6 (permalink)  
Antiguo 17/03/2003, 15:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Te dije que ya arreglé el código en el mensaje .. Fijate que ya le puse ese ) q me faltó.

if (!in_array($valor,$array_destino)){


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 17/03/2003, 15:55
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Muchisimas gracias Cluster

Que podriamos hacer sin vosotros los modeladores, y como muchisima gente que apoya a todas nuestras preguntas,a los interesantes a la programación en PHP.

Saludos,
  #8 (permalink)  
Antiguo 17/03/2003, 16:36
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Saludos Cluster,
Tengo un pequeño problema,

Si pudiera ser que se me pasaran otra vez a variables, para hacerlo con un for

$array_origen[] = "Casa";
$array_origen[] = "Casa";
$array_origen[] = "Arbol";
$array_origen[] = "Arbol";

$array_destino=array();
foreach ($array_origen as $valor){
if (!in_array($valor,$array_destino)){

$array_destino[]=$valor;
}
}

// ejemplo Leer el array generado ..
foreach ($array_destino as $valor){
echo $valor."<br>";
}



Saludos
  #9 (permalink)  
Antiguo 17/03/2003, 20:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Si pudiera ser que se me pasaran otra vez a variables, para hacerlo con un for
No entiendo eso de "pasar otra vez a variables" ...

En términos generales .. Un array lo puedes recorrer con un bucle foreach() o con cualquier otro tipo de bucle accediendo a sus indices .. En tu caso el array q formas tiene indices numericos (auto-numerico) comenzando por el 0 ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 17/03/2003, 20:43
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Pues el $valor[0] no me lo a enontrado sus registros, lo único que me a salido és como $valor.

El problema esque lo he hecho sacar de una base dedatos y cuando le digo que me muestre unos registros cuando la condicion sea correcta, arrastrando varios arrays con migo.


Código PHP:
$base ="Mibase";
$tabla="mitabla";
$conexion=mysql_connect("xx","xx","xx");
mysql_select_db($base,$conexion);
$resultado=mysql_query("SELECT * FROM $tabla",$conexion);
$num=mysql_num_rows($resultado);
for (
$x=0;$x<$num;$x++){
$Idt10[] = mysql_result($resultado,$x,0);
$Cat10[] = mysql_result($resultado,$x,1);
$Sub10[] = mysql_result($resultado,$x,2);
$IdV10[] = mysql_result($resultado,$x,3);
$Usu10[] = mysql_result($resultado,$x,4);
$Pas10[] = mysql_result($resultado,$x,5);
$Ems10[] = mysql_result($resultado,$x,6);

// BUSCA COINCIDENCIAS SIN MIRAR MAY Y MINÚSUCULAS
$CEUP strcasecmp($Usua,$Usu10[$x]);
// MIRO SUS COINCIDENCIAS                        if ($CEUP != 0 and $Busq==$Cat10[$x] and $Sub==$Sub10[$x] and $Id==$IdV10[$x]){
                        
$Corri1[]=$Idt10[$x]; 
                        
$Corri2[]=$Cat10[$x];
                        
$Corri3[]=$Sub10[$x];
                        
$Corri4[]=$IdV10[$x]; 
                        
$Corri5[]=$Usu10[$x];
                        
$Corri6[]=$Pas10[$x];
                        
$Corri7[]=$Ems10[$x]; 
                        }
                        } 
PASARME ARRAYS [];

Ya que solo quiero que me cuando la condicion sea correcta me lo lleve a otras variables para pasarla por email a cada usuario, con su nombre.

No se si me has podido entender.
Creo que me has dicho que $valor sería igual que $valor[0] y etc.etc.

Pero le e puesto un count y un for para mostrarme el $valor.

Saludos

Última edición por Cluster; 17/03/2003 a las 21:21
  #11 (permalink)  
Antiguo 17/03/2003, 21:13
Avatar de MSDark  
Fecha de Ingreso: noviembre-2002
Ubicación: Talca VII región
Mensajes: 337
Antigüedad: 22 años
Puntos: 1
ocupa el maldito boton de PHP que para eso lo tiene el foro ok!!!!!
__________________
DelirioLinux.. Software Libre y tecnología.. php también..
Saludos :arriba:
Usuario Linux #198486 y Ubuntu #12791
Gutsy Gibbon
  #12 (permalink)  
Antiguo 17/03/2003, 21:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Sigo sin entender que estas haciendo ....

$valor NO es un array en el ejemplo del foreach() .. el array sin las coincidencias es $array_destino .. y te puse el ejemplo de un bucle foreach() para recorrerlo .. pues es la manera mas rápida y clara para recorrer un array sin estar contando sus elementos que pueda tener .. (acostumbrate a usarlo ..)

Solo te digo que de un bucle foreach por ejemplo si necesitas una variable "contador" par usarlo como indice de no se q otra array puedes hacer:


Código PHP:
$x=0;
foreach (....){
echo 
$x."<br>";
$x++; // esto sería el "contador"

Lo mismo podrias usar (la técnica del "contador") en un bucle while() por ejemplo ...

Otros detalles .. que tal vez te esten complicando (o por lo menos a mi me asusta ver como lo haces ... )

Usa:

Código PHP:
While ($registro=mysql_fetch_array($resultado)){
$Idt10[] = $registro[0];
$Cat10[] = $registro[1];
//etc ...

Con eso te evitas los for .. el mysql_num_rows .. etc etc etc ..

El bloque de código q dices "Busca coincidencias" .. No se que es lo q quieres hacer .. Pero desde ya te digo que si ajustases mejor la consulta SQL que estas haciendo (muy simple para lo que se ve que estas haciendo) .. te evitarias MUCHA lógica PHP por medio ...

Por ejemplo .. al hacer una consulta SQL tienes el parametro DISTINCT .. con eso muestras SOLO los registros que sean diferentes de una consulta que hagas .. Su uso sería:

Código PHP:
$resultado=mysql_query("SELECT DISTINC * FROM $tabla",$conexion); 
Y así un largo etc, que creo q haciendo una buena consulta SQL a tu tabla podrías hacerlo de una forma mas clara y mucho mas optima en su proceso.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 18/03/2003, 03:40
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Aunque soy un poco nuevo en esto aunque cometo muchos fallos de programacion, no de sintaxis, el problema es que yo era programador de Basic muchismios años, y la lógica me lleva para otras cosas.
Aunque si me comentas que DISTINC me saca las coincidencias sin hacer repeticiones, probare con la función y te comento.

Saludos,
  #14 (permalink)  
Antiguo 18/03/2003, 03:46
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Mira lo que quiero hacer, para que lo veas un poco más claro.

En el for saco los resultados de mi tabla despues le digo que los que me coincidan con los resultados volver hacer nuevos arrays.
Como en el Foro del Web que cuando dejas un mensaje todos los usuarios activos que se han registrado a las preguntas, se les envia el E-mail con el nombre etc.etc., para ello estoy buscando que las otras variables,
no solo $valor me lo extraiga, ya que cuando me saque los resultados el $valor sin registros duplicados me lleve los otros arrays pero con la coincidencia del $valor.

No se si aún no me e podido explicartelo bien.

Saludos
  #15 (permalink)  
Antiguo 18/03/2003, 04:20
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Mira Cluster,

$resultado=mysql_query("SELECT DISTINC * FROM $tabla WHERE (Categoria='$Busq' and Subcategoria='$Sub' and IdVenta='$Id')",$conexion);

He hecho lo mencionado por ti Cluster de sacar los resultados directamente desde la tabla, hasta aquí todo correcto y me funciona perfecto per me da el error en DISTINC, para sacar los resultados sin resultados iguales.

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in preguntar.php on line 304
  #16 (permalink)  
Antiguo 18/03/2003, 09:14
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 22 años, 3 meses
Puntos: 8
Lamento llegar tarde a la discucion, pues mysql lo tengo +o-, pero para remover valores duplicado de un array tenemos array_unique();

Mas info...
http://www.php.net/manual/es/function.array-unique.php

Saludos!
  #17 (permalink)  
Antiguo 18/03/2003, 09:23
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Es que estoy intentando sacar de mi tabla registros no duplicados.
Y Cluster me ha dado una instrucción de MYSQL para poder hacerlo.



Saludos,
  #18 (permalink)  
Antiguo 18/03/2003, 09:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Gracias fran86 .. por el detalle de array_unique() ... se me pasó.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 18/03/2003, 09:45
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Cluster, te pudistes mirar el error que me daba anteriormente sobre la consulta de la tabla .

Me harias un gran favor si pudieras ayudarme,

Gracias a los grandes del Foro,
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:28.