2010-01-17 6 views
2

J'ai les sorties de tableau suivantes.Comment convertir un tableau en liste sans. = En PHP?

Array 
(
    [day] => 17 
    [eventContent] => event 1 of 17th 
    [eventTitle] => 17th event 1 
) 

Array 
(
    [day] => 19 
    [eventContent] => event 1 of 19th 
    [eventTitle] => 19th event 1 
) 

Array 
(
    [day] => 05 
    [eventContent] => event 1 of 5th 
    [eventTitle] => 5th event 1 
) 

Array 
(
    [day] => 17 
    [eventContent] => event 2 of 17th 
    [eventTitle] => 17th event 2 
) 

Array 
(
    [day] => 19 
    [eventContent] => event 2 of 19th 
    [eventTitle] => 19th event 2 
) 

Array 
(
    [day] => 19 
    [eventContent] => event 3 of 19th 
    [eventTitle] => 19th event 3 
) 
... 
... 

Maintenant, je veux faire comme les suivants.

Par exemple, pour 19

<li> 
<span class="title">19th event 1</span> 
<span class="desc">event 1 of 19th</span> 
</li> 
<li> 
<span class="title">19th event 2</span> 
<span class="desc">event 2 of 19th</span> 
</li> 
<li> 
<span class="title">19th event 3</span> 
<span class="desc">event 3 of 19th</span> 
</li> 

J'ai essayé ce qui suit. Cela fonctionne très bien en PHP mais pas en Codeigniter. Donc j'espère que quelqu'un peut me dire une autre façon de faire avec dehors. =

Merci d'avance.

$events[intval($row_event->day)] .= '<li><span class="title">' 
.stripslashes($row_event->eventTitle). 
'</span><span class="desc">'.stripslashes($row_event->eventContent). 
'</span></li>'; 

Et voici les détails du modèle.

$events = array(); 

//query the database for events between the first date of the month and the last of date of month 
// $result = mysql_query("SELECT DATE_FORMAT(eventDate,'%d') AS day,eventContent,eventTitle FROM eventcal WHERE eventDate BETWEEN '$current_year/$current_month/01' AND '$current_year/$current_month/$total_days_of_current_month'"); 

$query = $this->db->query("SELECT DATE_FORMAT(eventDate,'%d') AS day,eventContent,eventTitle FROM eventcal WHERE eventDate BETWEEN '$current_year/$current_month/01' AND '$current_year/$current_month/$total_days_of_current_month'"); 
foreach ($query->result_array() as $row_event) 
{ 

$events[intval($row_event['day'])] .= '<li><span class="title">' 
.stripslashes($row_event['eventTitle']).'</span><span class="desc">' 
.stripslashes($row_event['eventContent']).'</span></li>'; 
... 
... 

--UPDATE--

Contrôleur

Code here

Voir

Code here

erreurs

A PHP Error was encountered 

Severity: Notice 

Message: Undefined offset: 17 

Filename: models/mcalendar_one.php 

Line Number: 38 

Array 
(
    [day] => 17 
    [eventContent] => event 1 of 17th 
    [eventTitle] => 17th event 1 
) 

A PHP Error was encountered 

Severity: Notice 

Message: Undefined offset: 19 

Filename: models/mcalendar_one.php 

Line Number: 38 

Array 
(
    [day] => 19 
    [eventContent] => event 1 of 19th 
    [eventTitle] => 19th event 1 
) 
... 
... 
+0

Que voulez-vous dire "fonctionne en PHP mais pas en Codeigniter"? Avez-vous le code dans une vue ou dans un contrôleur? – Boldewyn

+0

Merci pour la réponse. Actualisé. – shin

Répondre

4

Cela peut simplifié un peu. Tout d'abord, regardez Active Record dans la classe de base de données de CI, cela rendra vos appels DB plus faciles. Pourquoi ne pouvez-vous pas renvoyer le tableau à la vue et l'y injecter?

Votre vue peut ressembler à

<?php foreach ($row_event as $event) : ?> 
    <li> 
    <span class="title"><?php echo $event->eventTitle; ?></span> 
    <span class="desc"><?php echo $event->eventContent; ?></span> 
    </li> 
<?php endforeach; ?> 

Ce sera une boucle sur votre tableau de détails de l'événement et faites votre liste.

3

Le décalage de matrice n'existe pas à ce stade. Donc, la toute première fois que vous assignez, ne pas ajouter en utilisant un .. Après cette première affectation, l'index existe et l'utilisation d'un . est OK.

$events[intval($row_event['day'])] = '<li><span class="title">' 

Avis = au lieu de .=

Donc, pour donner un exemple:

$myArray = array(); 
echo $myArray[0]; // Undefined offset 

est faux que l'indice 0e n'existe pas.

De même, $myArray[0] .= "something"; est faux parce que si nous élargissons la .= dehors, il devient:

$myArray[0] = $myArray[0] . "something"; // see the problem? 

Cela devrait prendre soin de l'avis que vous voyez, mais vous devez utiliser la solution de Scott au lieu d'imprimer HTML code à l'intérieur d'une chaîne PHP car c'est juste une très mauvaise pratique, que nous réalisons tous tôt ou tard.

1

Pleaser NE JAMAIS créer html dans votre modèle, c'est un abus du modèle MVC. Et ne pas enchaîner des chaînes pour le faire. Ecrivez-vous une vue, en html plain qui (à certains endroits) des valeurs d'écho en utilisant php, tout comme Scott décrit.

Questions connexes