【问题标题】:Get duplicated array value only once in foreach php在foreach php中只获取一次重复的数组值
【发布时间】:2013-09-19 13:11:32
【问题描述】:

我的数组有 12 个带有标题、描述和类别名称的新闻条目

我只有 4 个类别(每个类别 3 个项目)并且需要创建类别菜单,但是如果我从项目数组中获取它们,结果我有 12 个类别名称(每个 3x)。如果已经打印,我如何才能只回显一次类别名称?

$myarray 打印:

   [0] => Array
        (
            [title] => Item 1
            [desc] => Sed venenatis bibendum nisl, eget iaculi
            [cat_title] => Category 1
        )

    [1] => Array
        (
            [title] => Item 1
            [desc] => Sed venenatis bibendum nisl, eget iaculi
            [cat_title] => Category 2
        )
    [2] => Array
        (
            [title] => Item 2
            [desc] => Sed venenatis bibendum nisl, eget iaculi
            [cat_title] => Category 2
        )...

循环:

   foreach( $myarray as $key=>$item){

       echo $item['category_name'];
    }

注意:我不知道会有多少个类别,它可以是一个或多个。目前有4个。 任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 这些数据是否是查询的结果,因为如果是,您很可能可以处理查询,并以这种方式获得所需的内容。它可能会比你现在做的更高效......
  • Elias 赢得了我的评论。如果这是来自数据库,那么您在错误的级别上解决了这个问题。顺便说一句,在您的循环中,您的示例不需要 $key=>$item。
  • 是的,它来自数据库,问题是我正在处理数据库打印模板广告无法与实际数据库查询混淆。那是我的第一次尝试,我遇到了问题,但问题是我最终会得到我的查询以及默认加载的那个我不应该触摸的查询。

标签: php arrays


【解决方案1】:

将数组类别映射到一个简单数组,然后删除所有重复值。

$categories = array_unique(array_map(function($val) {
    return $val['cat_title'];
}, $myarray));

foreach($categories as $cat) {
    echo $cat;
}

【讨论】:

  • 很棒的一个。非常感谢!
【解决方案2】:

您可以创建临时数组:

$temp = array();
foreach( $myarray as $key=>$item){
 if(!in_array($item['category_name'], $temp)){
       echo $item['category_name'];
       $temp[] = $item['category_name'];
 }
}

【讨论】:

  • 非常好,但是 Davids 有点干净。
  • @Benn 是的,我也同意你的看法:)
猜你喜欢
  • 2013-12-27
  • 2019-10-08
  • 2016-02-08
  • 2018-06-07
  • 1970-01-01
  • 2011-02-11
  • 2013-05-29
  • 2012-06-15
相关资源
最近更新 更多