【问题标题】:foreach loop doesn't echo due to illegal string offset?由于非法字符串偏移,foreach 循环不回显?
【发布时间】:2017-06-14 20:38:48
【问题描述】:

我正在制作一个简单的私人消息系统。 我尝试让所有对话都出现在用户的收件箱中,为此我使用了 foreach 循环。但是,循环似乎没有打印出任何东西。它只给出错误:警告:非法字符串偏移量。

以下是代码示例(在我的原始代码中,我通过查询从数据库中获取这些值)

$result = array();
$result['conversation_id'] = '3';
$result['conversation_subject'] = 'test112';
$result['conversation_last_reply'] = '1485701808';

print_r($result);

foreach($result as $conversation){
    echo $conversation['conversation_subject'];
}

当我使用 print_r 时,会打印出正确的结果(3、test112 和 1485701808),但在 foreach 循环中我不断收到警告。 谁能帮我解决这个问题? 谢谢!!

编辑:相关的 PHP 代码

$sql = $db->prepare("SELECT 
                        conversations.conversation_id, 
                        conversations.conversation_subject, 
                        MAX(conversations_messages.message_date) AS conversation_last_reply 
                        FROM conversations 
                        LEFT JOIN conversations_messages ON conversations.conversation_id = conversations_messages.conversation_id
                        INNER JOIN conversations_members ON conversations.conversation_id = conversations_members.conversation_id
                        WHERE conversations_members.user_id = {$_SESSION['user_id']}
                        AND conversations_members.conversation_deleted = 0
                        GROUP BY conversations.conversation_id
                        ORDER BY conversation_last_reply DESC");
$sql->execute();

$result = $sql->fetch(PDO::FETCH_ASSOC);

foreach($result as $conversation){
    ?>
    <div class="conversations">
        <h4><a href=""><?php echo $conversation['conversation_subject']; ?> </a></h4>
        <p>Last reply: </p>
    </div>
    <?php
}

编辑:当我尝试回显“conversation_last_reply”时,我也会收到 2 个警告: date() 期望参数 2 为整数,字符串在 AND 中给出警告:非法字符串偏移量。

这是我试图回显日期的内容:

 echo date('d/m/Y H:i:s', $conversation['conversation_last_reply']);

【问题讨论】:

  • $conversation['conversation_subject'] 错误,$conversation 不是数组。只需执行echo $conversation;。或者echo $result['conversation_subject'];
  • @RajdeepPaul 当我这样做时,我得到以下输出:3test1121485701808,但我只想要 test112
  • @C.T.您不需要 that foreach 循环,直接从 $result 数组访问元素 - echo $result['conversation_subject'];
  • @RajdeepPaul 问题是我想要一个所有对话的列表,所以我需要一个 foreach 循环。当只有 1 次对话时,没关系。但是当用户有多个对话时,我想循环这些对话,为所有对话创建一个
    并将对话主题作为

标签: php foreach


【解决方案1】:

来自OP's comment

我想要一个所有对话的列表,所以我需要一个 foreach 循环。当只有 1 次对话时,没关系。但是当用户有多个对话时,我想循环这些对话,为所有对话创建一个并将对话主题作为&lt;h2&gt;

使用while() 循环而不是foreach 循环循环遍历结果集中的所有对话。

// your code
$sql->execute();
while($conversation = $sql->fetch(PDO::FETCH_ASSOC)){
    ?>
    <div class="conversations">
        <h2><a href=""><?php echo $conversation['conversation_subject']; ?> </a></h2>
        <p>Last reply: </p>
    </div>
    <?php
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-09-29
  • 2019-03-01
  • 2020-11-29
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2020-06-11
  • 2013-02-19
相关资源
最近更新 更多