【问题标题】:How to get the id of each object from a php foreach loop?如何从 php foreach 循环中获取每个对象的 id?
【发布时间】:2016-01-13 15:47:20
【问题描述】:

在 php 中使用 foreach 循环我试图从数据库中检索数据。这个想法是使用 foreach 循环从数据库中显示数据,例如标题,以便将数据放入对象/div中。

这是一个例子:

这是数据库(数据库->帖子):

我正在使用 mysql 查询来获取数据:

$db = new mysqli('localhost', 'username', 'password', 'database');

$postQuery = $db->query("
        SELECT 
        posts.id, 
        posts.title

        FROM posts

        GROUP BY posts.id
        ");

    while($row = $postQuery->fetch_object()){
        $posts[] = $row;
    }

然后我使用 foreach 循环显示数据:

<?php foreach($posts as $post): ?>
<div><?php echo $post->title; ?>
etc.
</div>
 <?php endforeach; ?>

似乎一切正常,除非我尝试在 mysql 查询中使用 posts.id 来检查数据库中具有相应 post.id 的表的内容。有没有办法检索 id 以在查询或 php 函数中使用它?

【问题讨论】:

  • $post-&gt;id; 是您要查找的内容,这仅在 foreach 循环内有效。
  • 感谢您的回答,但我知道这一点。关键是 $post->id 由于某种原因在 foreach 之外不起作用。
  • 这取决于您要查找的内容。这不起作用,因为您在 while 循环中创建了一个数组,而不是在 foreach 中使用它。
  • 所以假设我想使用像 $test 这样的变量来引用循环外的查询,它试图使用 post->id 来查看数据库中是否有id 和另一列。这可能吗?
  • Shadow 在他的回答中提到,您可以使用$posts[x]-&gt;id,其中x 是您可以用来识别的元素。

标签: php mysql foreach


【解决方案1】:

在 php 中,您可以在 foreach 循环中将 id 引用为 $post-&gt;id(遵循您的编码约定),或在 foreach 循环之外引用 $posts[x]-&gt;id,其中 x 是 $posts 数组中元素的索引。

但是,在 sql 中,您可以在某些字段上连接表,因此您不必检索 posts.id 列,只是将这些 id 作为 sql 请求的一部分发回。有关详细信息,请参阅joins 上的 mysql 文档。

您应该从查询中删除group by posts.id,它是多余的。

【讨论】:

  • 感谢您的回答,但有没有办法在 foreach 循环之外使用 $post->id ?还是我必须在循环内调用查询?或者是否可以设置一个引用循环外查询的变量?
  • @Polymelon 请不要在 cmets 中添加代码,您可以编辑您的问题。
  • 是的。更新了我回答的第一句。
  • 我无法让它工作。如果我将括号留空,它会返回一个内部服务器错误,但我应该将什么设置为可能的索引?
  • 您想检索哪个帖子的 id。对不起,我猜不出你想做什么。我认为你应该得到一本关于 php 编程的好书并从头开始。我也已经建议你甚至可能不需要在php中引用帖子的id,你可以在sql中使用join来从其他表中获取相应的数据。
猜你喜欢
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多