Ir al contenido


Foto

problemas con array


  • Por favor identifícate para responder
18 respuestas en este tema

#1 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 04:49

Hola Amigos!!!
mi problema es el siguiente, necesito comparar un registro de la bd con una variable , pero los registros estan guardados de esta forma ejem: 124|541|551|541 etc
entonces los llamo, hago un explode y los separo, hasta ahi todo bien pero no logro hacerlo comparandolo con una variable, en donde tengo el error?
saludos y muchas gracias (muy bueno el foro)
mi codigo es este



php
  1. $sql2 = mysql_query('SELECT compra_arti_id FROM compras', Conectar::con());
  2.  
  3.           while ($fila = mysql_fetch_array($sql2))
  4.               {
  5.           $ex = explode('|',$fila['compra_arti_id']);
  6.            
  7.       if (in_array($variable, $ex)) { echo 'Esta en compras'; } else{echo 'no esta';}
  8.          
  9.           }


  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 07:58

Y no te servirá algo como esto?



php
  1.   $sql2 = mysql_query('SELECT compra_arti_id FROM compras', Conectar::con());
  2.   while ($fila = mysql_fetch_array($sql2)) {
  3.     if ( strpos($fila['compra_arti_id'], $variable) )
  4.         echo 'Esta en compras';
  5.     else echo 'no esta';
  6.   }


  • 0

#3 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 08:13

Hola como estas
gracias por la respuesta pero tengo una duda
el echo de que el texto que necesito comparar con la variable este guardado de esta forma 124|1455|1111|541
yo necesito comparar el 1455 con la variable , no hace falta hacer un explode() entonces?
probe con el codigo que me pusiste y me dio este resultado :
Esta en comprasno estaEsta en comprasno estano estano estano estaEsta en comprasEsta en comprasno estano estano estano estaEsta en comprasno estano estano estano estano estano estano estano estano estano estano estano estano estano estano estano esta
esta bien asi?
saludos y te agradezco un monton por tu tiempo
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 15 agosto 2011 - 08:33

Está bien, sólo que deberás hacerlo fuera del while:



php
  1. $sql2 = mysql_query('SELECT compra_arti_id FROM compras', Conectar::con());
  2. $fila = mysql_fetch_array($sql2)
  3.  
  4.     if ( strpos($fila['compra_arti_id'], $variable) )
  5.         echo 'Esta en compras';
  6.     else echo 'no esta';


  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 08:50

Hola como estas
gracias por la respuesta pero tengo una duda
el echo de que el texto que necesito comparar con la variable este guardado de esta forma 124|1455|1111|541
yo necesito comparar el 1455 con la variable , no hace falta hacer un explode() entonces?


No es necesario generar un array ya que lo que necesitas es saber si el valor de $Variable está en el contenido de la fila actual. Para eso con un simple strpos basta. Áhora bien, te manda esos valores debido a que el while va recorriendo todas las filas devueltas por la consulta. Para que tengas más idea de lo que está evaluando php ejecuta lo siguiente:



while ($fila = mysql_fetch_array($sql2)) {
    if ( strpos($fila['compra_arti_id'], $variable) )
        echo "El valor: $variable se ecuentra en la cadena: ".$fila['compra_arti_id'];
    else echo "El valor: $variable no se pudo encontrar en : ".$fila['compra_arti_id']; 
}



  • 0

#6 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 09:07

Buenisimo!!!! ya casi esta!!!
lo estoy haciendo asi


delphi
  1. $sql2 = mysql_query('SELECT compra_arti_id FROM compras', Conectar::con());
  2.   $fila = mysql_fetch_array($sql2);
  3.  
  4.  
  5.   if ( strpos($fila['compra_arti_id'], $variable) )
  6.       echo 'Esta en compras';
  7.         else echo 'no esta';


el unico inconveniente que tengo es que en un campo de la base de datos lo que necesito comparar con la variable esta ingresado de esta forma 1|1745|1454;
el 1745 y el 1454 lo encuentra y lo compara  perfectamente pero no el 1 , existe la forma de que compare todo ?
saludos y muchas gracias por la aclaracion anterior
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 09:14

existe la forma de que compare todo ?


Claro, hazlo de la siguiente manera



delphi
  1. $sql2 = mysql_query('SELECT compra_arti_id FROM compras', Conectar::con());
  2.     $fila = mysql_fetch_array($sql2);
  3.  
  4.  
  5.   if ( strpos(" ".$fila['compra_arti_id'], $variable) )
  6.       echo 'Esta en compras';
  7.         else echo 'no esta';
  8.        


  • 0

#8 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 09:36

Ahora si!!! , pero note que  esta buscando solamente en la primera fila del campo "compra_arti_id" y no en los siguientes , como podria hacer que recorra todas las filas?
Saludos y gracias por su tiempo
  • 0

#9 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 09:46

Ahora si!!! , pero note que  esta buscando solamente en la primera fila del campo "compra_arti_id" y no en los siguientes , como podria hacer que recorra todas las filas?
Saludos y gracias por su tiempo



Prueba de la siguiente manera:



php
  1. while ($fila = mysql_fetch_array($sql2)) 
  2.   if ( strpos(" ".$fila['compra_arti_id'], $variable) )
  3.     $Filas[] = $fila['compra_arti_id'];   
  4.  
  5. echo "El valor: $variable se ha encontrado en las filas: ";
  6. print_r($Filas);


  • 0

#10 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 09:53

perfecto !!!!
me devuelve esto
El valor: 17741 se ha encontrado en las filas: Array ( [0] => 1 |17741 |17741 [1] => 17741 |5191 |12201 [2] => 19961 |17741 [3] => 18261 |19961 |17741 |16261 [4] => 11 |17741 [5] => 18261 |17741 |10941 [6] => 17741 [7] => 17741 |71 |6661 |18251 |19261 |71 |18261 |17741 |17741 )
pero ahora estoy medio perdido
como sigo?
  • 0

#11 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 15 agosto 2011 - 09:57



php
  1. $sql2 = mysql_query('SELECT compra_arti_id FROM compras', Conectar::con());
  2. while ($fila = mysql_fetch_array($sql2))
  3. {
  4.   $ex[] = explode('|',$fila['compra_arti_id']);
  5. }
  6.  
  7. if (in_array($variable, $ex)) { echo 'Esta en compras'; } else {echo 'no esta';}




¿Y así?, debería de funcionar, digo...
  • 0

#12 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 10:03

pero ahora estoy medio perdido
como sigo?


Creo que no entiendo tu pregunta amigo. ¿Qué deseas hacer?
  • 0

#13 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 10:14



delphi
  1. $sql2 = mysql_query('SELECT compra_arti_id FROM compras', Conectar::con());
  2. while ($fila = mysql_fetch_array($sql2))
  3. {
  4.   $ex[] = explode('|',$fila['compra_arti_id']);
  5. }
  6.  
  7. if (in_array($variable, $ex)) { echo 'Esta en compras'; } else {echo 'no esta';}



me sigue devolviendo 'no esta'
con strpos
lo que note es que me devuelve una coincidencia en todo el texto por ejemplo si tiene que buscar 1747 , lo encuentra pero dentro de 174712 y yo necesitaba que encuentre la palabra exacta 1747 dentro de la base de datos
la verdad estoy re perdido jajajaja!!!!
que puedo hacer, porque probe el ejemplo que hay en el manual online  de php con respecto a in_arrray() y funciona!!! pero cuando lo aplico a mi codigo no anda

  • 0

#14 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 10:32

la verdad estoy re perdido jajajaja!!!!



Jajajaj, cierto¡¡¡¡¡¡¡¡¡¡

Enecuneme ya te dió la respuesta mi amigo
  • 0

#15 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 10:46

GRACIAS TOTALES!!! enecumene y poliburrro seguire probando a ver que sale
Saludos
  • 0

#16 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 11:12

GRACIAS TOTALES!!! enecumene y poliburrro seguire probando a ver que sale
Saludos


Excelente amigo, solo no olvides compartirnos la solución final,
  • 0

#17 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 11:53

Encontre un error
en la base de datos tengo guardados lo registros de esta manera
1|2|1247|541 pero descubri que entre la ultima cifra y esto  | me esta generando un espacio vacio  1aca|2aca|1247aca|541
entonces hice lo siguiente


delphi
  1. while ($fila = mysql_fetch_array($sql2))
  2. { $rt=str_replace(' ','',$fila['compra_arti_id']);
  3.  
  4.  
  5.  $ex[]=explode('|',$fila['compra_arti_id']);
  6.  
  7. }
  8. if (in_array($arti_id, $ex)) { echo 'Esta en compras'; } else {echo 'no esta';}


pero el problema continua
a Alguien se le ocurre algo?
  • 0

#18 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 agosto 2011 - 12:41

Partiendo del código de enecumene y con tus modificaciones podemos hacerlo de la sig manera:



delphi
  1.   while ($fila = mysql_fetch_array($sql2))  {
  2.     $ex[]=explode('|',str_replace(' ','',$fila['compra_arti_id']));
  3.     if (in_array($arti_id, $ex))
  4.       $filas[] = $fila;
  5.   }
  6.  
  7.   echo "El valor buscado se encuentra en las siguientes filas:";
  8.   print_r($filas);
  9.  



Cada fila que coincida con el valor será agregada al arreglo $filas, de tal manera tendrás acceso a toda la información que coincide con el valor.

Saludox




  • 0

#19 tumbero_x

tumbero_x

    Advanced Member

  • Miembros
  • PipPipPip
  • 65 mensajes

Escrito 15 agosto 2011 - 01:16

BUENISIMO!!!! AHORA SI!!
funciona perfecto!!!
solamente tengo 2 preguntas
1-porque cuando imprimo sale dos veces
El valor buscado se encuentra en las siguientes filas:Array ( [0] => Array ( [0] => 17741 |71 |6661 |18251 |19261 |71 |18261 |17741 |17741 [compra_arti_id] => 17741 |71 |6661 |18251 |19261 |71 |18261 |17741 |17741 ) )
2-Cual era mi error?


este es el codigo final


delphi
  1. while ($fila = mysql_fetch_array($sql2))  {
  2. $d=str_replace(' ','',$fila['compra_arti_id']);
  3.     $ex=explode('|',$d);
  4.     if (in_array($arti_id, $ex))
  5.       $filas[] = $fila;
  6.   }
  7. if($filas){echo 'esta';} else{echo 'no esta';}


saludos y Muchas gracias por tu tiempo

  • 0




IP.Board spam blocked by CleanTalk.