array_search()在第二个参数上抛出错误

时间:2016-11-07 17:52:07

标签: php arrays laravel

在数组中查找特定关键字时遇到问题。我正在使用Laravel。

我正在尝试查找具有特定关键字的特定帖子,与twitter函数完全相同。

访问www.foobar.com/shoutouts/$hashtag时,执行以下功能:

public function shoutoutSpecific($hashtag) {
        $hashtag = '#' . $hashtag;
        $shoutouts = Shoutout::orderBy('created_at', 'DESC')->get();

        foreach($shoutouts as $shoutout) {
          if (array_search($hashtag, $shoutout->hashtag) !== false) {
            $shoutouts2 = $shoutouts2 . $shoutout;
          }
        }

        return view('shoutout', compact('shoutouts2'));
    }

shoutout-> hashtag的数据库表包含以下示例

a:1:{i:0;s:5:"#test";}

因此,当访问www.foobar.com/shoutouts/test时,该函数应该找到具有#test标签的特定shoutout,从而将这些标记抛出到一个可以在视图中循环的数组中。

然而,当我访问www.foobar.com/shoutouts/test时,我得到了

array_search() expects parameter 2 to be array, string given

我不明白,因为第二个参数是数据库中的一个数组。

所有帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

a:1:{i:0;s:5:"#test";}的序列化值为:

array(1) {
  [0]=> string(5) "#test"
}

首先,您必须使用ie unserialize($string)函数对其进行反序列化。之后array_search应按预期工作。

Laravel可以通过定义您希望在访问时将哪些属性转换为json来自动执行此操作:

protected $casts = [
    'hashtag' => 'array'
];

有关此内容的更多信息:https://laravel.com/docs/5.3/eloquent-mutators#array-and-json-casting