Разобрать строку массива из поля [РЕШЕНО]

Главные вкладки

Аватар пользователя Shizuku Shizuku 6 июля 2013 в 19:14

В таблице ulogin_identity есть вот такое замечательное поле data:

a:11:{s:7:"network";s:6:"google";s:8:"identity";s:50:"https://plus.google.com/u/0/10645454545643385323/";s:3:"uid";s:21:"10645454545643385323";s:5:"email";s:14:"izuku@mail.ru";s:10:"first_name";s:16:"MyName";s:9:"last_name";s:10:"Tsukishima";s:8:"nickname";s:7:"Izuku";s:5:"bdate";s:10:"01.09.1984";s:6:"manual";s:24:"last_name,nickname,bdate";s:7:"profile";s:50:"https://plus.google.com/u/0/106283505544643385323/";s:14:"verified_email";s:1:"1";}

Очевидно, что там находится ассоциативный массив, но как мне получить из него нормальные данные, например для того, чтобы получить nickname и скормить в alert()?

Комментарии

Аватар пользователя Shizuku Shizuku 7 июля 2013 в 13:56

"duozersk" wrote:
А зачем?

Для отладки. Мне пока не удалось передать информацию из uLogin в поля профиля по токенам - хотя это выглядело красивым и быстрым вариантом. Поэтому параллельно стал разрабатывать вариант с прямым получением всего нужного из базы.

Плюс надо перенести данные из полей Profile в новые поля Profile2. Ну, и похоронить Profile, отключив его, раз уж он все равно мертвый. Smile

А поля профиля тоже сериализованы, как оказалось!

Аватар пользователя Shizuku Shizuku 7 июля 2013 в 14:19

Вот здесь: https://drupal.org/node/1228062, длительная дискуссия на тему импорта данных из старого профиля в новый модуль, но она до сих пор ни к чему не привела Smile

Мне импортировать всего одно поле, значит будет запрос на INSERT новых c подзапросом на выборку старых. Но... Не выйдет, потому что у меня там поле типа "Дата", а такого типа в Profile2 нету! Значит я должен при помощи PHP обработать выборку, и пустить на INSERT обычный unserialize текст.

Аватар пользователя Shizuku Shizuku 12 июля 2013 в 10:05

Вот рабочий код, который разбирает подобную строку в поле profile_born из модуля Profile.
Пример profile_value = 'a:3:{s:5:"month";s:1:"7";s:3:"day";s:1:"1";s:4:"year";s:4:"1985";}'

<?php
$title = db_query("SELECT value FROM {profile_value} WHERE uid = :uid", array(':uid' =>1))->fetchField();
$row=unserialize($title);

//Для расширенной отладки (включить модуль Devel):
//Database::startLog('node_load_debug');
//   здесь ваш код
//dpm(Database::getLog('node_load_debug'));

// вывод в статус страницы
drupal_set_message($message = $title, $type = 'status', $repeat = TRUE);
drupal_set_message($message = $row["year"], $type = 'status', $repeat = TRUE);
?>

Всем спасибо!