2016-11-07 6 views
0

У меня возникла проблема при поиске определенного ключевого слова в массиве. Я использую Laravel.array_search() выдает ошибку при втором параметре

Я пытаюсь найти конкретные должности, у которых есть определенное ключевое слово, точно так же, как функция твиттера.

При посещении 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-> хэштегом содержит пример следующие

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

Итак, когда посещая www.foobar.com/shoutouts/test, функция должна найти конкретные крики с хэштегом в виде #test и тем самым передать их в массив, который может быть зациклирован в представлении.

Однако, когда я посещаю www.foobar.com/shoutouts/test, я получаю

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

и я не получаю это, потому что второй параметр является массивом в базе данных.

Вся помощь приветствуется.

+0

Это говорит вам, что это неправильно. Вы передали строку. 'array_search()' ищет значения массива для заданной строки. – Jaime

ответ

0

a:1:{i:0;s:5:"#test";} сериализации значение:

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

Итак, сначала вы должны десериализации его с помощью т.е. unserialize($string) функции. После этого array_search должен работать должным образом.

Laravel может сделать это автоматически определяя, какие свойства вы хотите быть отлиты в формате JSON при обращении:

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

Подробнее об этом здесь: https://laravel.com/docs/5.3/eloquent-mutators#array-and-json-casting

Смежные вопросы