【问题标题】:How to convert array to list without .= in PHP?如何在 PHP 中将数组转换为没有 .= 的列表?
【发布时间】:2011-01-06 01:14:22
【问题描述】:

我有以下数组输出。

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

--更新--

控制器

Code here

查看

Code here

错误

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

【问题讨论】:

  • “在 PHP 中工作但在 Codeigniter 中无效”是什么意思?你有代码在视图还是控制器中?
  • 感谢您的回复。已更新。

标签: php codeigniter arrays


【解决方案1】:

此时数组偏移量不存在。所以第一次分配时,不要使用. 追加。在第一次分配之后,索引就存在了,使用. 就可以了。

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

这应该注意您看到的通知,但您应该使用 Scott 的解决方案,而不是在 PHP 字符串中打印 HTML 代码,因为那只是一种非常糟糕的做法,我们迟早都会意识到这一点。

【讨论】:

    【解决方案2】:

    这可以简化很多。首先,看看 CI 数据库类中的 Active Record,它会让你的数据库调用变得 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】:

      不要在您的模型中创建 html,这是对 MVC 模式的滥用。并且不要连接字符串来做到这一点。用纯 html 为自己写一个视图,它(在某些地方)使用 php 回显值,就像 Scott 描述的那样。

      【讨论】:

        猜你喜欢
        • 2012-03-03
        • 1970-01-01
        • 2019-04-10
        • 2022-11-24
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2017-11-26
        相关资源
        最近更新 更多