Foros del Web » Programando para Internet » PHP »

array_key_exists ó in_array

Estas en el tema de array_key_exists ó in_array en el foro de PHP en Foros del Web. Quiero empezar agradeciendo su ayuda o sugerencias. Les comento que necesito saber si dentro de un arreglo asociativo esta cierto dato, el arreglo es de ...
  #1 (permalink)  
Antiguo 26/02/2010, 10:09
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años
Puntos: 0
array_key_exists ó in_array

Quiero empezar agradeciendo su ayuda o sugerencias.

Les comento que necesito saber si dentro de un arreglo asociativo esta cierto dato, el arreglo es de esta forma.

events(14, dia del amor, Cena bailable casa camino playa 22 hrs)->indice 0
events(24, Reunion con pepito, sala gerencia)->indice 1
events(28, Club de tobi, salida a local a reunion social)->indice 2

Mi idea es buscar el dato de los dias y luego asgnarle una clase css para pintar el dia del calendario donde hay eventos ...entonces podria decir que para el mes de febrero los dias con eventos son 14 24 y 28.

Ahora esto averigue:
in_array:
En PHP disponemos de la función in_array la cual nos permite verificar si un valor X se encuentra en un arreglo X , si se encuentra,la función nos retornara true al punto de invocación , de lo contrario nos retornara false.

array_key_exists:
PHP nos permite verificar si una clave existe dentro un arreglo , para ellos disponemos de la función array_key_exists que nos devuelve true si la clave fue localizada dentro de dicha estructura, de lo contrario nos devuelve false.


Ahora hice las siguientes pruebas:
Código PHP:
 if (in_array($day$events)){
    
//adding the date_has_event class to the <td> and close it
    
echo ' class="date_has_event"> '.$day
Bueno esto no me hizo nada no me pinta los dias ni nada.

Código PHP:
 if(array_key_exists("day",$events)){
    
//adding the date_has_event class to the <td> and close it
    
echo ' class="date_has_event"> '.$day
De esta forma tampoco no me hace nada.....ahora si les saco las comillas osea asi if(array_key_exists(day,$events)){ ...
me arroja este error:
Notice: Use of undefined constant day - assumed 'day' in C:\wamp\www\portal\calendario.php on line 146 y me pinta todos los dias.

Y ya nose que como hacerlo para que me encuentre el dato dentro del arreglo...y se que estan los dias de los eventos guardados en el arreglo ya que hago este codigo y me los muestra osea imprime.
Código PHP:
foreach($events as $key){
     echo 
$key["day"]."<br>";

Bueno gracias ... a todos los que puedan ayudar.
  #2 (permalink)  
Antiguo 26/02/2010, 10:15
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 5 meses
Puntos: 5
Respuesta: array_key_exists ó in_array

¿No te lo spinta pero te imprime el día?
Debe ser un problem de tu CSS.

El array_key_exist ya te lo dice, comprueba q la llave o clave exista, no es lo mismo que el valor. OJO.
Respóndeme la primera pregunta para ubicarme más
  #3 (permalink)  
Antiguo 26/02/2010, 10:37
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años
Puntos: 0
Respuesta: array_key_exists ó in_array

haber lo que pasa que yo genero el calendario con un for de esta forma.

Código PHP:
for($i=0$i$total_rows$i++)
            {
                for(
$j=0$j<7;$j++)
                {
                    
$day++;                    

                    if(
$day>&& $day<=$total_days_of_current_month)
                    {
                        
//YYYY-MM-DD date format
                        
$date_form "$current_year/$current_month/$day";

                        echo 
'<td';

                        
//check if the date is today
                        
if($date_form == $today){
                            echo 
' class="today"';
                        }

                        
//check if any event stored for this date in $events array
                        
if(array_key_exists("day",$events)){
                         
// if (in_array($day, $events)){
                            //adding the date_has_event class to the <td> and close it
                            
echo ' class="date_has_event"> '.$day;
                            
                            
//adding the eventTitle and eventContent wrapped with <span> and <li> to <ul>
                            
echo '<div class="events">
                                        <ul>'
.$events[$day].'</ul>
                                    </div>'
;
                        }
                        else
                        {
                            
//if there is not event on that date then just close the <td> tag
                            
echo '> '.$day;
                        }

                        echo 
"</td>";
                    }
                    else
                    {
                        
//showing empty cells in the first and last row
                        
echo '<td class="padding">&nbsp;</td>';
                    }
                }
                echo 
"</tr><tr>";
            }
            
            
?> 
ese es el codigo que ocupa si te das cuenta hay comentario donde hice mis pruebas // if (in_array($day, $events)){ ...

Pero por ejemplo si me pinta el dia actual que este trozo de codigo.

Código PHP:
//check if the date is today
    
if($date_form == $today){
        echo 
' class="today"';
    } 
y si le asigno la clase today a los dias con eventos tampoco hace nada....entonces segun esas pruebas debe ser algo con php y los arreglos...gracias por tu interes en ayudarme.
  #4 (permalink)  
Antiguo 26/02/2010, 10:56
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 5 meses
Puntos: 5
Respuesta: array_key_exists ó in_array

Hay cosas q no entiendo, arriba me dices que
Código HTML:
Ver original
  1. events(14, dia del amor, Cena bailable casa camino playa 22 hrs)->indice 0
  2. events(24, Reunion con pepito, sala gerencia)->indice 1
  3. events(28, Club de tobi, salida a local a reunion social)->indice 2
No entiendo muy bien q quiere decir esto, ¿mismo índice para estos valores?
Lo otro, no posteas la declaración del array q tienes. Mira bien que cuando dices
Código PHP:
Ver original
  1. if(array_key_exists("day",$events))
Quieres decir q si en el array aparece la llave "day"
???
Postea el código con la declaración del array q tienes
  #5 (permalink)  
Antiguo 26/02/2010, 11:14
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años
Puntos: 0
Respuesta: array_key_exists ó in_array

Claro justamente day es una de las claves del arreglo.

mira el codigo de como hago el llenado del arreglo.
Código PHP:
$query="SELECT DATE_FORMAT(eventDate,'%d') AS day,eventTitle,eventContent, FROM eventcal WHERE eventDate BETWEEN  '$current_year/$current_month/01' AND '$current_year/$current_month/$total_days_of_current_month'";

$objBD->consultar($query);

while(
$row_event $objBD->obtendatos()){
    
$events[$count] = $row_event;
    
$count++;

Entonces al arreglo seria de esta forma:

Para el indice 0
events(14, dia del amor, Cena bailable casa camino playa 22 hrs)->indice 0

events(day,eventTitle,eventContent) de esa forma seria.

Espero haberme explicado bien
  #6 (permalink)  
Antiguo 26/02/2010, 11:46
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 5 meses
Puntos: 5
Respuesta: array_key_exists ó in_array

Pero si no es un array asociativo, ¿porq es q pones
Código PHP:
Ver original
  1. if(array_key_exists("day",$events))
?
Esto no te estará validando nada, puesto que no es un array asociativo.
¿O es un array multidimensional?
  #7 (permalink)  
Antiguo 26/02/2010, 11:52
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años
Puntos: 0
Respuesta: array_key_exists ó in_array

Entonces ...como lo deberia hacer.?
  #8 (permalink)  
Antiguo 26/02/2010, 14:18
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 5 meses
Puntos: 5
Respuesta: array_key_exists ó in_array

Pues eso lo sabrás mejor q nadie. Pero coméntame cuál es la idea general de tu project
  #9 (permalink)  
Antiguo 26/02/2010, 14:56
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años
Puntos: 0
Respuesta: array_key_exists ó in_array

Hacer un calendario de eventos....con jquery y php...la idea es que em pinte aquellos dias que tiene eventos y atraves de algun plugin de jquery me levante un tooltip dandome el titulo del evento y su descripcion.
  #10 (permalink)  
Antiguo 26/02/2010, 15:45
Avatar de eulloa  
Fecha de Ingreso: octubre-2007
Ubicación: Donde caiga la noche, si mi hijo me deja
Mensajes: 691
Antigüedad: 16 años, 5 meses
Puntos: 5
Respuesta: array_key_exists ó in_array

No veo porq complicarlo tanto, por lo menos desde mi vision.
Yo q tu haria:
Consulto la BD, en busqueda del dia actual, si hay evento (registros), pinto la celda, sino no. Listo.
El dia lo puedes pasar por diferentes vias, eso ya lo sabras.
  #11 (permalink)  
Antiguo 26/02/2010, 19:34
 
Fecha de Ingreso: marzo-2004
Ubicación: Chile
Mensajes: 382
Antigüedad: 20 años
Puntos: 0
Respuesta: array_key_exists ó in_array

Haber eso que me dices esta listo de la consulta de la base de datos ....en el arreglo $events estan los dias que hay eventos para un mes x...

El tema esta que creo el calendario para el caso de este mes con 28 dias entonces cuando hay un dia con algun evento lo pinto y sigue creando el calendario ...sigue avanzando el for.

Como por mi parte trato de hacer las cosas averigue que en php hay una funcion que se llama array_search.

array_search -- Busca un valor determinado en una matriz y devuelve la clave correspondiente en caso de éxito.

Entonces empece a hacer ejemplos de como funcionaba y hice estos ejemplos:
Código PHP:
$day="verde";
$matriz = array(=> 'azul'=> 'rojo'=> 'verde'=> 'amarillo');
$clave1 array_search($day$matriz); // $clave = 2;
echo "Aca busco en el arreglo el elemnto verde "."en esta posicion esta: ".$clave1."<br>"
Esto funciona ok...me arroja la posicion donde esta el elemento verde dentro del array.

ahora trate hacer un ejemplo para mi caso y no me resulta, se supone que mi arreglo es de esta forma:
events(array,array,array)

Donde:
Cada array contiene:
(day=20, eventTitle=Titulo del evento, eventContent=la descripcion del evento)
(day=22, eventTitle=Titulo1 del evento, eventContent=la descripcion del evento1)
(day=28, eventTitle=Titulo2 del evento, eventContent=la descripcion del evento2)

Haber espero haberme explicado bien....ya no se me ocurre que mas puedo hacer, de todas formas seguire leyendo.

Gracias por cualquier ayuda.

Etiquetas: Ninguno
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 19:57.