【问题标题】:Laravel Find tag in postLaravel 在帖子中查找标签
【发布时间】:2016-12-28 22:23:22
【问题描述】:

我在帖子中定义了许多标签。 我将帖子循环到每个帖子,并尝试检查标签是否包含特定名称 - 例如“汽车”。

$post->tags

循环还给我

Collection {#346 ▼
#items: array:2 [▼
0 => Tag {#353 ▼
  #fillable: array:1 [▶]
  #connection: null
  #table: null
  #primaryKey: "id"
  #perPage: 15
  +incrementing: true
  +timestamps: true
  #attributes: array:4 [▶]
  #original: array:8 [▶]
  #relations: array:1 [▶]
  #hidden: []
  #visible: []
  #appends: []
  #guarded: array:1 [▶]
  #dates: []
  #dateFormat: null
  #casts: []
  #touches: []
  #observables: []
  #with: []
  #morphClass: null
  +exists: true
  +wasRecentlyCreated: false
}
1 => Tag {#352 ▶}
]
}

如何查看标签名称?

【问题讨论】:

  • 执行此操作dd($post->tags->toarray()) 这将在数组中显示结果(以便更容易可视化输出,这仅用于测试),然后您只需执行 foreach 迭代每个元素就像@mannil 写的那样。
  • 感谢您的提示。它很好地返回数组。

标签: php laravel collections


【解决方案1】:

您可以使用foreach 循环遍历所有标签。我假设您的 Tag 对象具有您可以参考的名称属性。一个代码示例是:

foreach($post->tags as $tag){
    if($tag->name == "THENAMEYOUARELOOKINGFOR"){
         //do sth. here
    }
}

如果您想使用in_array 方法,您可以转换您的集合,以便有一个仅包含标签名称的数组。

$nameArray = $posts->tags->pluck('name')->all();
//Now you can use in_array
if(in_array("YOURSTRING", $nameArray)){
    //do sth.
}

【讨论】:

  • 我正在寻找像 in_array() 这样的函数。我很惊讶,如果这不能用简单的方法来完成。
  • @Maximi 可以使用 in_array() 方法,但是会稍微复杂一些。我正在更新我的答案;)
  • 好的,现在我明白了。但哪个更快?
  • 我认为 foreach 更好,因为它会在第一次找到时停止。但不确定性能。尤其是采摘。无论如何,我的问题似乎解决了。
  • 我认为两者是相同的,因为在数组中是一个线性搜索(它与每个相同,它从值 1 进行比较直到找到所需的结果),为了改进这一点,你可以获取从数据库中排序的数据,然后使用二进制搜索算法或类似的算法(如果你想要更好的性能)
猜你喜欢
  • 2023-04-06
  • 2010-11-16
  • 2021-07-08
  • 2018-02-11
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多