2014-02-04 2 views
-1

Я пытаюсь сохранить спорт, который пользователь понравился на Facebook в базе данных. Этот код является частью моего входа в Facebook, я использую laravel.Facebook php sdk/save users sports/array to string conversion

$ me содержит все данные пользователя, которые я получаю от Facebook.

if (array_key_exists('sports', $me)){ 


        $test = $me['sports']; 

        $json = strval($test); PROBLEM HERE 

        $data = json_decode($json, true); 
        $sports = array(); 
        foreach ($data as $item) { 
         $sports[] = $item['name']; 
        } 

        $user->fb_sports = $sports; 
       } 

Моя проблема в том, что я получаю массив для преобразования строк. Я пытаюсь преобразовать содержимое переменной $ test в строку для следующего кода для правильной работы.

Однако я действительно не знаю, что делать.

$me['sports'] 

возвращает

[{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}] 

Однако для моего кода, чтобы работать должным образом, я бы нужно, чтобы вернуть эту (обратите внимание на 'и'):

'[{"id":"108124505876479","name":"Wakeboarding"},{"id":"112003352149145","name":"Bouldering"},{"id":"110008522357035","name":"Handball"}]' 

Есть ли способ исправить это? Я просто хочу сохранить эти виды спорта в базе данных. Может быть, я выбрал совершенно неправильный путь здесь?

Любая помощь будет высоко оценена.

Спасибо.

EDIT:

Когда я пытаюсь это:

$sports = array(); 

foreach($me['sports'] as $sport){ 
    // save the name i.e. 
    $sports[] = $sport['name']; 
} 
//saving array     
$user->fb_sports = $sports; 

я получаю это:

enter image description here

+0

Вы не можете получить это (новое) сообщение об ошибке из кода, который вы указали ... 'preg_replace' там даже не используется. – CBroe

ответ

3

Я предполагаю, что вы используете PHP SDK в Facebook. Этот класс уже преобразовывает строку JSON в массив PHP. Вот почему «$ me ['sports']» - это массив.

Существует несколько вариантов сохранения этих видов спорта в вашей базе данных.

Вы хотите сохранить все виды спорта отдельно или все вместе в одной строке?

Если вы хотите сохранить их отдельно нужно петли:

foreach($me['sports'] as $sport){ 
    // save the name i.e. 
    your_save_function($sport['name']); 
} 

Если вы хотите сохранить все виды спорта вместе в одной строке я бы предложил взглянуть в функцию serialize.

$serializedString = serialize($me['sports']); 

Чтобы использовать массив снова вам нужно, чтобы получить его из базы данных и unserialize его.

Другим вариантом является преобразование массива в строку JSON еще раз и сохранение этого.

$jsonString = json_encode($me['sports']); 
your_save_function($jsonString); 

Если вы хотите использовать его как массив снова вам нужно, чтобы получить его из базы данных и преобразовать строку JSON в массив.

$sports = json_decode($your_db_array['sports']); 

Как вы можете видеть, существует несколько способов. Возможно, вы можете объяснить, что вы хотели бы сделать с данными, как только вы сохранили их в базе данных, чтобы я мог помочь вам выбрать лучший способ.

+0

ничего себе! какой ужасный ответ. Благодаря! Я определенно сделаю это правильно. Однако у меня только одна проблема. Я попытался сохранить только название спорта в моей базе данных. Сохранение serializedString работало нормально. Я редактировал вопрос еще раз с ошибкой, которую я получаю сейчас. – patrick

+0

Можете ли вы показать нам еще какой-нибудь код? Где вы объявляете $ user? – koenoe