Comparar Listas

Iniciado por Zieg Uchiha, 16 Marzo 2009, 05:35 AM

0 Miembros y 1 Visitante están viendo este tema.

Zieg Uchiha

mmmm aun no soluciono mi problema. a ver si alguien me puede ayudar.

tengo listas diferentes.

uno asi Ej:

Citar

casa
auto
motocicleta
bicicleta
monopatín
etc


y la otra asi

Citar

auto
camioneta
furgón
bicicleta
departamento


y lo que quiero es que tome el primer ítem de la primera lista y lo compruebe por la segunda lista, osea, lo busque, y si esta me de un echo diciendo "si esta", luego tome el segundo ítem y lo compruebe por todos los elementos de la lista, y así sucesivamente.

espero alguien pueda ayudarme, ya k no se como hacerlo y llevo dias tratando :(.

desde ya muchas gracias.

a otra cosa. alguien sabe como hacer para que me imprima solo una coincidencia aunque encuentre 2 o mas.

saludos.

satan69

podes usar array.. y con dos ciclos for que valla comparando la lista

cassiani

Código (php) [Seleccionar]

$Lista1 = array("casa","auto","motocicleta","bicicleta","monopatin");
$Lista2 = array("auto","camioneta","furgon","bicicleta","departamento","bicicleta");
foreach ($Lista1 as $Valor1)
{
foreach ($Lista2 as $Valor2)
{
if ($Valor1 == $Valor2)
{
echo "Coincidencia para ".$Valor1."<br>";
break;
}
}
}

Zieg Uchiha

#3
no me funciona :(.

voy a poner un estracto de lo que quiero hacer.

esta es la lista uno, la leo de txt. Es informacion de cuentas de usuario en un Juego.

Citar
Juneau Juliet 18 Sorc dead

zirex Orberita 2 Sorc dead

catiiita_10 nicro 3 Nec dead

HeFeStO SoRcY_HeFeStO 77 Sorc dead

HeFeStO CdR-MoRDeLoN 6 (null) dead

martinsho Martinsho 23 (null) dead

martinsho Don_Fermin 25 Nec dead

karensitha Tkf_Karensita 76 Sorc dead

tml-enchant Tml-Calentona 6 Sorc dead

gastonz MF-Coldgirl 4 Sorc alive

Zork_95 Ventix 5 Sorc dead

tutankarroyo Arkrak 22 Sorc dead

así como se ve,el primer nombre es la cuenta, el segundo horizontal es el nombre del Personaje, depues viene el nivel, despues la clase y despues si esta vivo, todo así separado por espacios.

y este es el archivo 2, es un dat que me da la info de el momento, me dice que cuenta estan online.

Citar

[STATUS]
Version=1.8.4
Uptime=2 days 7 hours 53 minutes 30 seconds
[CHANNELS]
channel1=The Void
channel2=Diablo II-1
channel7=Clan HnM
channel8=Clan Dif
channel9=Clan Msc
channel10=Clan Lhs
channel11=Clan Foc
channel12=Clan FBI
channel13=Clan Tml
channel14=Clan CdR
[GAMES]
game1=D2XP,Ger
game2=D2XP,Btybtyb
game3=D2XP,3
game4=D2XP,Fdgdf
game5=D2XP,Bh4
game6=D2XP,Pesa2
game7=D2XP,Pesa
game8=D2XP,Melo Aka
game9=D2XP,Poto
[USERS]
user1=D2XP,matariel
user2=D2XP,ZeroMan
user3=D2XP,Udemishon
user4=D2XP,juanshop
user5=D2XP,NeGroH
user6=D2XP,baron-rojo
user7=D2XP,miwo-enxant
user8=D2XP,Raper_D
user9=D2XP,ale_aggro
user10=D2XP,Rekiem
user11=D2XP,JUANB
user12=D2XP,japy
user13=D2XP,Zeus
user14=D2XP,yetafabox
user15=D2XP,alvarillo-
user16=D2XP,VorteX
user18=D2XP,Sir_Lothar
user19=D2XP,Vlad_Drak
user20=D2XP,poncer
user21=D2XP,JeSi
user22=D2XP,neitas
user23=D2XP,Ashknaref
user24=D2XP,maxjaker
user25=D2XP,th_wd4001
user26=D2XP,th_wd4002
user27=D2XP,alvarillo
user28=D2XP,rene_w


aunke el e dat me los abre todo junto, sin saltos de linea, en vez de un salto aparece un cuadrado :P.

ya ahora este es el codigo, mas o menos. Aunque e probado muchas formas y ninguna me a dado resultado como quiero, pero este es el que tengo ahora.

Código (php) [Seleccionar]


<?php

set_time_limit(1);
//archivos
$server="server.dat";
$char="charlist.txt";
//abrir achivos
$abrirchar=fopen($char,"r");
$abrirserver=fopen($server,"r");



while(!feof($abrirchar))
{

$leerchar=fgets($abrirchar);
list($acc$name)=split(" ",$leerchar);


while(!feof($abrirserver))
{

$leerserver=fgets($abrirserver);
$vec=explode("\n",$leerserver);

if ($acc==$vec[0])
{
echo $acc.'<br>';
break;
}else{

       echo'no encontro nada<br>';
}

}
}


?>



lo que quiero es que tome la primera variable $acc y buske coincidencias en el texto 2 de esa manera me va a decir si esta online si no la encuentra me devuelva un echo diciendo que esta offline, si en el texto 1 hay mas de una cuenta = que solo tome 1 y las otras no las tome y así....

espero que alguien pueda ayudarme T_T.

gracias.

saludos. ;-)

cassiani

#4
¿Que tal así?

Código (php) [Seleccionar]

$LineasTxt = file("Archivo.txt");
$Gestor = fopen("Archivo.dat", "r");
$sContenido = fread($Gestor, filesize("Archivo.dat"));
fclose($Gestor);
foreach ($LineasTxt as $LineTxt)
{
$Datos = explode(" ",$LineTxt);
$Usuario = trim($Datos[0]);
if (!empty($Usuario))
{
if (eregi($Usuario,$sContenido)) echo $Usuario." esta on-line<br>";
else echo $Usuario." esta off-line<br>";
}
}


tu le pones los asentos  :xD

saludos,

Zieg Uchiha

si funciono bien, gracias, pero todavia se imprime todas las coincidencias, si encuentra mas de 1 las imprime todas, y la idea es que solo imprima 1.

Pero Gracias.

Saludos.

cassiani

aaa lo olvide, y me pareció raro eso de varias cuentas con el mismo nombre de usuario, pero ya caí xD

sencillo, se me ocurren varias formas de hacerlo, está puede ser una:

sustituyes aquel bloque por este:
Código (php) [Seleccionar]

if (!empty($Usuario))
{
$Flag = false;
foreach ($ListaUsuarios as $sUsuario) if ($sUsuario == $Usuario) $Flag = true;
if ($Flag == false)
{
$ListaUsuarios[] = $Usuario;
if (eregi($Usuario,$sContenido)) echo $Usuario." esta on-line<br>";
else echo $Usuario." esta off-line<br>";
}
}


y luego de cerrar el archivo, esta:
Código (php) [Seleccionar]
$ListaUsuarios[]=array();

Zieg Uchiha

#7
Gracias amigo!!!. me solucionaste la Vida xD.

ahora, no se si será mucha molestia pero, yo soy novato en esto, me gustaria que me explicaras un poco que fue lo que hiciste con todo el codigo.

bueno ahi me dices si puedes o no ^^, Pero hasta ahi muchas GRACIAS.


cassiani

No es nada compañero, explicando soy muy malo, por encimita es algo así:

1- creamos un array con las líneas del txt
2- vaciamos en una variable el contenido del dat
3- creamos un nuevo array para almacenar los nombre de usuarios
4- por cada info de la cuenta, obtenemos el nombre de usuario y lo comparamos con los que ya se han hido almanenando y en caso de que no este, hacemo lo propio.
5- luego obtenemos el estado de la cuenta y la mostramos.

Ahora, para que tengas una idea más amplia, puedes ir buscando lo que hace cada función y le vas agregando comentarios...

Lo fundamental es tener la idea, luego ya se ve como se hace, siempre hay varias formas ..

saludos,

Zieg Uchiha

disculpa, tal vez es mucho pedir pero como seria para que me imprima mas o menos así.

Citar

cuenta    ONLINE

          Nombre de pj1      Level     Class
          Nombre de Pj2      Level     Class
          Nombre de Pj2      Level     Class
          ............................................

y assi sucesivamente.

T_T espero aprender algun dia T_T.