【问题标题】:Limit Results From Unique Array限制唯一数组的结果
【发布时间】:2022-01-14 23:27:10
【问题描述】:

我有一个数据库选择查询,它从多行的列中返回逗号分隔的结果列表,并且代码过滤了重复的字符串,效果很好。

但是,我想限制从 array_unique 返回的字符串数量 - 因为我不能使用典型的 ++counter 并打破这个过滤器,所以我不知道如何只返回 5例如字符串而不是整个过滤后的数组(返回大约 300 个唯一字符串)。

我写的:

foreach ($tags as $row) {
   $filter = array_unique($row);
      foreach (explode(',', trim($sep['tags'])) as $tag) {
         printf('<span>%s</span>', strip_tags($tag));
      }
}

我试过了

$filter = array_unique($row);
$sep = array_slice($filter, 0, 5);
foreach (explode(',', trim($sep['tags'])) as $tag)
...

这只是再次返回 300 行。我怎样才能做到这一点?

谢谢!

【问题讨论】:

  • 你为什么要那样做?它根本没有效果......你只想返回前5个或随机5个或5个最常见的还是什么?数据库是否包含多行,其中包含由逗号分隔的多个标签,或者每个标签都在不同的行中?如果是第一个,这不是存储标签的正确方法
  • 我想要前 5 行,允许用户单击“查看更多...”,这会加载更多结果 - ajax。每个数据库行包含超过 2 个相同的字符串 - 但每行有大约 4 个逗号分隔的字符串,但是它选择大约 2000 行的查询,从查询中产生过滤的 300 个结果。我知道这不是方式,但这是我们的方式,直到我们将这些移动到具有 2 之间的关系链接的表。
  • 我觉得这个问题的根本原因可能是糟糕的数据库设计。这并不完全清楚,但听起来您可能在同一个字段中存储了多个值?我认为这将有助于我们获得一些样本数据并查看您的查询,以便我们更清楚地了解整体情况

标签: php arrays database string loops


【解决方案1】:
  1. 如果标签在数据库或 json 中存储为不同的行会更好。

  2. 使用您的数据,当您获得足够的计数时,您可以打破界限。

$tags = 'a,b,c,d,e,f,g,h,c,e,x';
foreach (array_unique(explode(',', trim($tags))) as $index => $tag) {
 echo strip_tags($tag);
 if($index+1 == 5){
     break;
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多