Как преобразовать массив в список без. = В PHP? - PullRequest
2 голосов
/ 17 января 2010

У меня есть следующие массивы выходов.

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
)
...
...

Теперь я хочу сделать это следующим образом.

Например для 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>

Я попробовал следующее. Он отлично работает в PHP, но не в Codeigniter. Поэтому я надеюсь, что кто-то может сказать мне другой способ сделать это. =

Заранее спасибо.

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

А вот детали модели.

$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>';
...
...

- ОБНОВЛЕНИЕ -

Контроллер

Код здесь

View

Код здесь

Ошибка

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
)
...
...

Ответы [ 3 ]

4 голосов
/ 17 января 2010

Это может немного упростить. Во-первых, посмотрите на Active Record в классе базы данных CI, это сделает ваши звонки в БД на 100% проще.

Почему вы не можете передать массив обратно в представление и вставить его туда?

Ваш взгляд может выглядеть как

<?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; ?>

Это перебирает ваш массив данных о событиях и составляет ваш список.

3 голосов
/ 17 января 2010

Смещение массива на данный момент не существует. Поэтому при первом назначении не добавляйте с помощью .. После этого первого присваивания индекс существует, и использование . в порядке.

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

Уведомление = вместо .=

Итак, приведем пример:

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

неверно, поскольку 0-й индекс не существует.

Точно так же, $myArray[0] .= "something"; не так, потому что если мы расширим .=, он станет:

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

Это должно позаботиться об уведомлении, которое вы видите, но вы должны использовать решение Скотта вместо распечатки HTML-кода внутри строки PHP, так как это очень плохая практика, которую мы все понимаем рано или поздно.

1 голос
/ 17 января 2010

Пожалуйста, НИКОГДА создайте html в вашей модели, что является злоупотреблением шаблоном MVC. И не согласовывайте строки, чтобы сделать это. Напишите себе представление в виде обычного html, которое (в некоторых местах) отображает значения, используя php, как описал Скотт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...