【问题标题】:PHP: Display the same array value only oncePHP:仅显示一次相同的数组值
【发布时间】:2016-12-19 19:17:18
【问题描述】:

我有一个名为 tags 的表,其中包含 tag_name 和 question_id。就像 Stack Overflow 一样,我可以通过用逗号爆炸来插入每个标签。这行得通。

但我也想显示所有标签。假设这是我从tags 表中选择后得到的结果。

Array (
    [0] => Array (
        [tag_name] => tag-1,
        [question_id] => 1
    )
    [1] => Array (
        [tag_name] => tag-1,
        [question_id] => 2
    )
    [2] => Array (
        [tag_name] => tag-2,
        [question_id] => 3
    )

)

当我遍历它们时,我得到了

tag-1
tag-1
tag-2

但这不是我想要的。我在想类似的东西

tag-1 × 2
tag-2

我怎样才能做到这一点? 我用的是CodeIgniter,不过没关系,我只想了解它的逻辑。

提前致谢。

【问题讨论】:

  • 您似乎正在尝试计算重复条目。所以...COUNT() 他们并做一个 GROUP BY ;-) 甚至可能将 HAVING 与COUNT() 结合使用。那会奏效的。

标签: php arrays mysqli


【解决方案1】:

我尚未对此进行测试,但应该可以使用类似的方法:

<?php
$tag_array = [
    0 => [
        'tag_name' => 'tag-1',
        'question_id' => 1
    ],
    1 => [
        'tag_name' => 'tag-1',
        'question_id' => 2
    ],
    2 => [
        'tag_name' => 'tag-2',
        'question_id' => 3
    ],
];

$count_tags = array();

foreach($tag_array as $v)
{
    if(!isset($count_tags[$v['tag_name']]))
    {
        $count_tags[$v['tag_name']] = 0;
    }

    ++$count_tags[$v['tag_name']];
}

// Sort your tags from hi to low
arsort($count_tags);

foreach($count_tags as $k=>$v)
{
    echo $k.($v > 1 ? ' x '.$v : '').'<br>';
}

输出:

标签-1 × 2 标签 2

或者您可以在 SQL 中执行此操作:

select
    tag_name,
    count(tag_name) as tag_count
from
    tags
group by
    tag_name
order by
    count(tag_name) desc

【讨论】:

  • 我看到了编辑 lol 好像你在上面看到了我的 cmets ;-) 你那里没有那个 SQL 部分。
  • @Fred-ii- 哈哈,是的!起初我没有注意到问题上的 mysqli 标签,所以我不想假设 OP 可以访问数据源:-)
  • 好吧,他们有选择 ;-)
  • 我会试一试谢谢大家。但只有一件事。它是否避免了其他重复项?
  • @mzcoxfde 不客气。请查看我的编辑,因为如果这对您很重要,我添加了排序
【解决方案2】:

我对这个问题的回答:

$array = [
    0 => [
        'tag_name' => 'tag-1',
        'question_id' => 1
    ],
    1 => [
        'tag_name' => 'tag-1',
        'question_id' => 2
    ],
    2 => [
        'tag_name' => 'tag-2',
        'question_id' => 3
    ],
];

$count = [];
foreach ($array as $arr)
{
    if (empty($count[$arr['tag_name']]))
    {
        $count[$arr['tag_name']] = 1;
    }
    else
    {
        $count[$arr['tag_name']]++;

    }
}

foreach ($count as $key => $c)
{
    echo $key . (($c > 1) ? ' x' . $c : '') . '<br>';'
}

// outputs:
tag-1 x2
tag-2

【讨论】:

  • 这也可能有效,但看起来与 MonkeyZeuz 的答案相同
  • 猜猜我在回答之前忘记刷新页面,如果你愿意,我会关闭我的答案。 (我想我们也有类似的想法)
猜你喜欢
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多