Foros del Web » Programando para Internet » PHP »

Mi eterno problema con los arrays

Estas en el tema de Mi eterno problema con los arrays en el foro de PHP en Foros del Web. Buenas..estoy tratando de averiguar si en un array que contiene dias de la semana se encuentra el valor JUEVES y si es asi que me ...
  #1 (permalink)  
Antiguo 12/05/2004, 11:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 14 años, 1 mes
Puntos: 0
Mi eterno problema con los arrays

Buenas..estoy tratando de averiguar si en un array que contiene dias de la semana se encuentra el valor JUEVES
y si es asi que me escriba en pantalla la palabra SI, de lo contrario escribiria NO... lo estoy haciendo con un ejemplo que les pregunte en este mismo foro hace un tiempo. Pero no me resulta...disculpenme que sea repetitivo pero se me complica bastante el aprendizaje del manejo de arrays :(

Utilizo en primera instancia la funcion array_recibe, luego la aplico a la variable dias, variable que estoy bajando de la base de datos.
El script es asi:

while($row = mysql_fetch_array($result))
{

##esto para comprobar que el array tiene algo, pero me da: Invalid argument supplied for foreach() ##

foreach(array_recibe($row["dias"]) as $valor) {echo' '.$valor.' ';};

##este es el script que quiero hacer funcionar, el error que me da: Wrong datatype for second argument ##

$dias = array_recibe($row["dias"]);
if(in_array("Jueves" , $dias)){echo'SI';}else{echo'NO';};

};

Probe con y sin el ARRAY_RECIBE pero sin resultados positivos, tambien probe echo' ' .$row["dias"]. ' '; me da "ARRAY "(esto lo hize para ver si era realmente un array, me fije en la base de datos y confirme una vez mas que el campo dias contiene "ARRAY",
tambien averigue en http://ar2.php.net/in_array donde sugieren una solucion pero no me resulto tampoco...
como diriamos en Argentina: "estoy enroscadisimo".

espero que alguien me pueda ayudar, desde ya gracias!

  #2 (permalink)  
Antiguo 13/05/2004, 07:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. a ver ...

* que hace tu función array_recibe? (pon el código)
* En $row['dias'] que valor exacto tienes? .. Jueves o JUEVES o escrito de otra forma?

Por otro lado .. SI estás haciendo una consulta a tu BD (una tabla o x tablas) y quieres ver si en esa tabla tienes un campo con X valor (o los que coincidan) .. sólo tienes que usar SQL (lenguaje estructurado de consultas) para hacer la consulta SQL pertinente "condicional" tipo:

Código PHP:
$sql="SELECT nose FROM tabla WHERE dia='Jueves'";
$consulta=mysql_query($sql) or die (mysql_error());

echo 
"Registros que son dia=Jueves<br>";
while (
$row=mysql_fetch_array($consulta)){
echo 
$row['nose']."<br>";

A nivel de optimización .. para eso existe el lenguaje SQL .. para que no obtengas tu "mega resultado" de tu consulta "simple" y tengas que usar funciones de PHP o del lenguaje que uses en ese instante para ver por ejemplo los registros que un campo coincida con tu valor dado.

Y si quieres dar un "existe o no existe" .. puedes "contar" los registros que va a arrojar esa consulta con COUNT() de SQL (de Msyql) o bien con la función mysql_num_rows()

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 13/05/2004, 07:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,
Cita:
echo' ' .$row["dias"]. ' '; me da "ARRAY "(esto lo hize para ver si era realmente un array, me fije en la base de datos y confirme una vez mas que el campo dias contiene "ARRAY",
Si el campo de la base de datos contiene "ARRAY", entonces es que has grabado en el campo la palabra "ARRAY". Es decir, no has grabado ningun array, solo una cadena de texto.

Asi que el problema esta en el codigo que graba el dato en la base de datos. Esto:
Código PHP:
$a=array(1,2);
$sql="INSERT into tabla (campo) values ('$a')"
no inserta el array, sino la cadena ARRAY, que es lo que devuelve PHP cuando haces un echo $a;

Ahora la cuestion es en que formato quieres guardar el array en la base de datos: como un array PHP serializado (solo seria posible manejar esos datos desde PHP); o como una cadena compuesta por los elementos del array separados por un caracter separador que no se encuentre entre los caracteres de los elementos.

Saludos.

PD: PHP y MySQL son programas independientes. No tienen por que compartir tipos de datos.

PD2: Tambien podrias guardar el array como un conjunto de MySQL (set) si solo pueden ser valores de un conjunto definido y finito (como puede ser los dias de la semana).
__________________
Josemi

Aprendiz de mucho, maestro de poco.

Última edición por josemi; 13/05/2004 a las 07:34
  #4 (permalink)  
Antiguo 21/05/2004, 06:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 14 años, 1 mes
Puntos: 0
Dias de la semana

Muchas gracias por tu ayuda, me fue de gran utilidad, lo resolvi de la siguiente manera, escribo el codigo por si le sirve a algun otro usuario...

1-Hize un multiselect con cada dia de la semana.
La variable $row["dias"] la obtengo de la base de datos.
Si el dia de la semana esta cargado en la base de datos en el mulitselect se ve el dia seleccionado, sino se ve deseleccionado.
Con el explode('-', $row["dias"]); puedo manejar los dias a mi antojo, por ejemplo comparandolos con el dia de hoy, o hacer que determinado dia el script reccione de X manera, etc, etc...

Código PHP:

$dias 
explode('-'$row["dias"]);


echo
'<select name="dias[]" size="7" multiple>';

if(
in_array ("Lunes"$dias))
{echo
'<option value="Lunes" selected>Lunes</option>'; }
else
{echo
'<option value="Lunes" >Lunes</option>'; };

if(
in_array ("Martes"$dias))
{echo
'<option value="Martes" selected>Martes</option>';}
else
{echo
'<option value="Martes">Martes</option>';};

if(
in_array ("Miercoles"$dias))
{echo
'<option value="Miercoles" selected>Miercoles</option>';}
else
{echo
'<option value="Miercoles">Miercoles</option>';};

if(
in_array ("Jueves"$dias))
{echo
'<option value="Jueves" selected>Jueves</option>';}
else
{echo
'<option value="Jueves" >Jueves</option>';};

if(
in_array ("Viernes"$dias))
{echo
'<option value="Viernes" selected>Viernes</option>';}
else
{echo
'<option value="Viernes">Viernes</option>';};

if(
in_array ("Sabado"$dias))
{echo
'<option value="Sabado" selected>Sabado</option>';}
else
{echo
'<option value="Sabado">Sabado</option>';};

if(
in_array ("Domingo"$dias))
{echo
'<option value="Domingo" selected>Domingo</option>';}
else
{echo
'<option value="Domingo">Domingo</option>';}

echo
'</select>'
2-Estos datos los envio a una pagina procesar.php, donde los inserto a la DB. Junto los datos de la siguiente manera:

Código PHP:
$dias1 $_POST["dias"];
   
$dias ='' .$dias1[0].'-'.$dias1[1].'-' .$dias1[2].'-'.$dias1[3].'-'.$dias1[4].'-'.$dias1[5].'-'.$dias1[6].''
(Inserto $dias)


Espero que les sirva, y cualquier critica es bienvenida.
  #5 (permalink)  
Antiguo 21/05/2004, 15:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Yo guardaría las fechas en formato ODBC standar y relacionado con el registro implicado en relación 1->N (1 registro N días ..) así podría hacer más y mejores consultas por esas fechas directamente con sentencias SQL.

Puedes ver un tutorial sobre normalización de BD Mysql en:
http://www.mysql-hispano.org/page.php?id=16


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 01:37.