在foreach循环之外使用变量
我尝试为学习目的创建一个简单的cms。我写了一个函数来获取特定类别的帖子。要打印帖子,我使用了一个foreach循环。但我想只在屏幕上使用cat_title一次。应显示与该cat_title/cat_id相关的所有帖子。我似乎无法得到这个工作。在foreach循环之外使用变量
function get_cat_posts($cat_id, $conn)
{
$result = $conn->query("SELECT blog_item.id, blog_item.title, blog_item.category_id, blog_item.posted_on, blog_item.content, menu_item.cat_title, menu_item.cat_id FROM blog_item INNER JOIN menu_item ON blog_item.category_id = menu_item.cat_id WHERE menu_item.cat_id= $cat_id");
if($result->rowCount() != 0) {
// - category title -
foreach($result as $row) {
echo '<hr>';
echo '<a href="post_cat_template.php/?category=' .$row['cat_id'] . '?post_id=' .$row['id'] . '">' . $row['title'] . '</a> - <em>' . $row['posted_on'] . '</em>';
echo '<hr>';
}
}
else { echo "no posts in this category";}
}
只要你是if($result->rowCount() != 0) {
里面,你知道$result[0]
存在并且,基于SQL,所有的$result
具有相同的cat_title
,所以你可以这样做:
function get_cat_posts($cat_id, $conn)
{
$data = $conn->query("SELECT blog_item.id, blog_item.title, blog_item.category_id, blog_item.posted_on, blog_item.content, menu_item.cat_title, menu_item.cat_id FROM blog_item INNER JOIN menu_item ON blog_item.category_id = menu_item.cat_id WHERE menu_item.cat_id= $cat_id");
if($data->rowCount() != 0) {
$result = $data->fetchAll(PDO::FETCH_ASSOC);
echo $result[0]['cat_title']; // format as you want
foreach($result as $row) {
echo '<hr>';
echo '<a href="post_cat_template.php/? category=' .$row['cat_id'] . '?post_id=' .$row['id'] . '">' . $row['title'] . '</a> - <em>' . $row['posted_on'] . '</em>';
echo '<hr>';
}
}
else { echo "no posts in this category";}
}
谢谢。如果我按照你的建议说: 不能使用PDOStatement类型的对象作为数组 –
我更新了答案(修改了第3行并添加了第5行)。以为我第一次读取'fetchAll()'。 – Berriel
谢谢!奇迹般有效! –
为什么不能你只是回声'cat_title',然后做'foreach'来显示你的帖子? – Maxxi
这是我的问题。为什么我不能。如果可以,如何? –