gpt4 book ai didi

php - 更改查询结果数组中元素的顺序

转载 作者:行者123 更新时间:2023-11-30 22:33:54 25 4
gpt4 key购买 nike

[edited] 我需要显示以特定方式排序的数据库中的帖子。有一个页面在设定的时间间隔通过 ajax 查询数据库以提取 180 个最新帖子。数据库中的每个帖子都有“来源”列,可以是“instagram”或​​“twitter”。 Ajax 返回 30 组(或更少)x 每组 6 个帖子(如果没有足够的帖子则更少)。在 js 的帮助下,所有集合都被隐藏,并且一次只显示一组(6 个帖子)。几秒钟后,设置被隐藏并显示下一个。可以把它想象成一个典型的幻灯片,但无限循环的是帖子而不是图像。

一开始,什么样的帖子在集合中并不重要。它可以是来自 Twitter 或 instagram 的所有 6 个帖子,也可以是混合的。但是像往常一样,当项目计划完成时,我被要求更改集的生成方式。现在客户希望只有 2 种类型的集合,其中的帖子按特定顺序排列(如下所述)。

所以我的问题是如何改变它(来 self 的 ajax 文件的简化示例):

    DB details for ref.: table POSTS: id / source / user / date etc.

$sql="SELECT * FROM posts ORDER BY id DESC LIMIT 180";
...
$stmt->setFetchMode(PDO::FETCH_OBJ);

$set=1;
while($row = $stmt->fetch()) {

if($set==1){
echo '<!--start set--><div class="set">';
}
if($row->source="twitter"){

echo '<div class="post twitter">';
echo '{all stuff related to this twitter post}';
echo '</div>';

} else if($row->source="instagram") {

echo '<div class="post instagram">';
echo '{all stuff related to this instagram post}';
echo '</div>';
}

if($set==6) {
echo '</div> <!--//END set-->';
$set=0;
}
}

$set++
}

让我生成这 30 个集合的东西,但是使用这种模式在它们之间分发帖子:

     <!--First set should has post in order: --
<div class="set>
<div class="post twitter">{stuff}</div> {instagram post} {instagram post}
{instagram post}{instagram post}{twitter post}
</div> <!--//END set-->

<!--Second set order:-->
<div class="set">
{instagram} {instagram} {twitter}
{twitter} {instagram} {instagram}
</div>

等等

当然,不能保证会有足够的帖子来创建所有 30 个具有这些模式的集合,所以我需要按照这两个模式创建尽可能多的集合,并且像以前一样将剩余的集合放入集合中,只是为了从数据库中提取它们.就这样。在此先感谢您提供任何建议/现成的解决方案;)等。

最佳答案

您可以尝试使用 array_filter 将两种帖子分开。

$posts = $stmt->fetchAll();
$twitterPosts = array_filter($posts, function($post){
return $post->source == "twitter";
});
$instagramPosts = array_filter($posts, function($post){
return $post->source == "instagram";
});

$set=1;
while(!empty($twitterPosts) && !empty($instagramPosts))
{
if($set%2 == 1)
{
$instagramPost1 = array_shift($instagramPosts);
$instagramPost2 = array_shift($instagramPosts);

$twitterPost1 = array_shift($twitterPosts);
}
else
{
$instagramPost1 = array_shift($instagramPosts);

$twitterPost1 = array_shift($twitterPosts);
$twitterPost2 = array_shift($twitterPosts);
}

/* display them */

if($set==6) {//your condition
echo '</div> <!--//END set-->';
$set=0;
}
$set++;
}

/* now one of them is empty, you can just display the other one */
if(!empty($twitterPosts))
/* Display all remaining twitter posts */
elseif(!empty($instagramPosts))
/* Display all remaining instagram posts */

当然,您应该添加验证,以确保数组中在 2 个 array_shift 之间仍有内容。

希望对您有所帮助!

编辑:抱歉,我错过了每行只有 3 个项目的条件,现在添加它。

关于php - 更改查询结果数组中元素的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33094108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com