За последние 24 часа нас посетили 17715 программистов и 1611 роботов. Сейчас ищут 2209 программистов ...

Как достать массив из строки тип longtext

Тема в разделе "PHP для новичков", создана пользователем vvdexter, 19 мар 2013.

  1. vvdexter

    vvdexter Активный пользователь

    С нами с:
    19 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Всем привет!
    Есть таблица со строкой тип данных longtext. В ячейках этой строки записаны массивы.

    Код (Text):
    1. a:8:
    2. {
    3. s:3:"sku";
    4. s:13:"Zodiac Indigo";
    5. s:8:"products";
    6. a:3:
    7. {
    8. i:1;a:3:{s:6:"option";s:13:"Zodiac Indigo";s:5:"price";s:5:"81000";s:9:"saleprice";s:0:"";}
    9. i:2;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    10. i:3;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    11. }
    12. s:11:"description";
    13. s:13:"Zodiac Indigo";
    14. s:8:"shiprate";
    15. s:0:"";
    16. s:8:"featured"
    17. ;s:2:"no";
    18. s:4:"sale";
    19. s:2:"no";
    20. s:10:"cart_radio";
    21. s:1:"1";
    22. s:6:"optset";
    23. s:0:"";
    24. }
    25.  a:8:
    26. {
    27. s:3:"sku";
    28. s:15:"Jacuzzi Profile";
    29. s:8:"products";
    30. a:40:
    31. {
    32. i:1;a:3:{s:6:"option";s:44:"Бассейн комплектации BASE";s:5:"price";s:6:"809000";s:9:"saleprice";s:0:"";}
    33. i:2;a:3:{s:6:"option";s:43:"Бассейн комплектации TOP";s:5:"price";s:6:"917800";s:9:"saleprice";s:0:"";}
    34. i:3;a:3:{s:6:"option";s:23:"Крышка-чехол";s:5:"price";s:5:"38400";s:9:"saleprice";s:0:"";}
    35. i:4;a:3:{s:6:"option";s:33:"Утепление Winter Pro Kit";s:5:"price";s:5:"33000";s:9:"saleprice";s:0:"";}
    36. i:5;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    37. i:6;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    38. i:7;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    39. i:8;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    40. i:9;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    41. i:10;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    42. i:11;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    43. i:12;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    44. i:13;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    45. i:14;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    46. i:15;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    47. i:16;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    48. i:17;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    49. i:18;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    50. i:19;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    51. i:20;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    52. i:21;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    53. i:22;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    54. i:23;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    55. i:24;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    56. i:25;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    57. i:26;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    58. i:27;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    59. i:28;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    60. i:29;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    61. i:30;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    62. i:31;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    63. i:32;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    64. i:33;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    65. i:34;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    66. i:35;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    67. i:36;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    68. i:37;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    69. i:38;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    70. i:39;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    71. i:40;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    72. }
    73. s:11:"description";
    74. s:15:"Jacuzzi Profile";
    75. s:8:"shiprate";
    76. s:0:"";
    77. s:8:"featured";
    78. s:2:"no";
    79. s:4:"sale";
    80. s:2:"no";
    81. s:10:"cart_radio";
    82. s:1:"1";
    83. s:6:"optset";
    84. a:1:{i:0;s:1:"2";}
    85. }

    В массиве хоронится информация о название товара и его стоимости. Пример:

    Код (Text):
    1. i:1;a:3:{s:6:"option";s:44:"Бассейн комплектации BASE";s:5:"price";s:6:"809000";s:9:"saleprice";s:0:"";}
    Вообщем я сейчас застрял в самом начале. У меня есть переменная $d в которую записан этот массив. Как мне извлечь из него список товара и в цикле присвоить к переменным.
    Например:

    Код (Text):
    1. $option = "Бассейн комплектации BASE";
    2. $price = "809000";
     
  2. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
  3. vvdexter

    vvdexter Активный пользователь

    С нами с:
    19 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    а как это будет выглядеть на практике, можно пример?
     
  4. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
  5. vvdexter

    vvdexter Активный пользователь

    С нами с:
    19 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Помогите разобраться в примере... вопросы в комментариях...

    Код (Text):
    1. <?php
    2. // Мы используем функцию unserialize() для загрузки сессионных данных в массив
    3. // $session_data из строки, извлекаемой из базы данных.
    4. // Данный пример дополняет пример, описывающий использование serialize().
    5.  
    6. $conn = odbc_connect("webdb", "php", "chicken"); // что за зачтения "webdb", "php", "chicken"
    7. $stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?"); // зачем тут эта переменная $conn и что означает это условие id = ? разве может в id записан знак ?
    8. $sqldata = array($_SERVER['PHP_AUTH_USER']); // откуда тут переменная $_SERVER что в ней записано и что за значение PHP_AUTH_USER
    9. if (!odbc_execute($stmt, $sqldata) || !odbc_fetch_into($stmt, $tmp)) {
    10.     // если процедура извлечения данных не удалась, то инициализируем пустой массив
    11.     $session_data = array();
    12. } else {
    13.     // сейчас у нас должны быть сериализованные данные в $tmp[0].
    14.     $session_data = unserialize($tmp[0]);
    15.     if (!is_array($session_data)) {
    16.         // что-то пошло не так, инициализируем пустой массив
    17.         $session_data = array();
    18.     }
    19. }
    20. ?>
     
  6. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Хм, а что тут непонятного? У тебя есть строка в базе в которой содержится сериализованный массив. Делаешь запрос к базе, вытаскиваешь эту строку, потом через прогоняешь через функцию unserialize и вот у тебя есть обычный массив. А дальше ты уже сам можешь через foreach Или while прогнать его.
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Пора переходить на mysqli, pdo и т.д.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    у человека ODBC, причем тут совет юзать импрувед майэскьюэль?
     
  9. vvdexter

    vvdexter Активный пользователь

    С нами с:
    19 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Вообщем застрял в самом начале.

    Вот этот пример работает
    Код (Text):
    1. $text = 'a:1:{s:5:"vadim";a:2:{s:5:"email";s:13:"vadim@mail.ru";s:4:"site";s:12:"www.vadim.ru";}}';
    2. $a = unserialize($text);
    3. print_r($a);
    выводит Array ( [vadim] => Array ( => [email=vadim@mail.ru]vadim@mail.ru [site] => http://www.vadim.ru ) )

    А вот этот этот выводит пустоту

    Код (Text):
    1. $text1 = 'a:8:{s:3:"sku";s:15:"Jacuzzi Profile";s:8:"products";a:40:{i:1;a:3:{s:6:"option";s:44:"Бассейн комплектации BASE";s:5:"price";s:6:"809000";s:9:"saleprice";s:0:"";}i:2;a:3:{s:6:"option";s:43:"Бассейн комплектации TOP";s:5:"price";s:6:"917800";s:9:"saleprice";s:0:"";}i:3;a:3:{s:6:"option";s:23:"Крышка-чехол";s:5:"price";s:5:"38400";s:9:"saleprice";s:0:"";}i:4;a:3:{s:6:"option";s:33:"Утепление Winter Pro Kit";s:5:"price";s:5:"33000";s:9:"saleprice";s:0:"";}i:5;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:6;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:7;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:8;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:9;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:10;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:11;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:12;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:13;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:14;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:15;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:16;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:17;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:18;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:19;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:20;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:21;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:22;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:23;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:24;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:25;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:26;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:27;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:28;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:29;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:30;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:31;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:32;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:33;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:34;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:35;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:36;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:37;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:38;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:39;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}i:40;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}}s:11:"description";s:15:"Jacuzzi Profile";s:8:"shiprate";s:0:"";s:8:"featured";s:2:"no";s:4:"sale";s:2:"no";s:10:"cart_radio";s:1:"1";s:6:"optset";a:1:{i:0;s:1:"2";}}';
    2.  
    3. $a1 = unserialize($text1);
    4. print_r($a1);
    Добавлено спустя 54 минуты 16 секунд:
    Не получается вывести "Zodiac Indigo",

    Код (Text):
    1. $text = 'a:3:{
    2.     i:1;a:3:{s:6:"option";s:13:"Zodiac Indigo";s:5:"price";s:5:"81000";s:9:"saleprice";s:0:"";}
    3.     i:2;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    4.     i:3;a:3:{s:6:"option";s:0:"";s:5:"price";s:0:"";s:9:"saleprice";s:0:"";}
    5. }';
    6.  
    7. $a = unserialize($text);
    8. // print_r($a);
    9.  
    10. echo $a[0]["option"];
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    там нет ключа 0.
    Код (PHP):
    1. $a1=unserialize($text1);
    2. echo'<pre>';
    3. print_r($a1);
    4. echo'</pre>';
    5. echo $a1['products'][1]['option'];
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    данные в этом массиве, насколько я вижу, UTF-8, там встречается русский текст, поэтому это важно!
    проверь, что файл сохранен в UTF-8, иначе будет ошибка
     
  12. vvdexter

    vvdexter Активный пользователь

    С нами с:
    19 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Файл сохранен в UTF-8

    Код (Text):
    1. $a1=unserialize($text1);
    2. echo'<pre>';
    3. print_r($a1);
    4. echo'</pre>';
    5. echo $a1['products'][1]['option'];
    не работает. Я пробовал удалить содержимое ячейки products все заработало

    Код (Text):
    1. <?php
    2. $text1 = 'a:7:{s:3:"sku";s:15:"Jacuzzi Profile";s:11:"description";s:15:"Jacuzzi Profile";s:8:"shiprate";s:0:"";s:8:"featured";s:2:"no";s:4:"sale";s:2:"no";s:10:"cart_radio";s:1:"1";s:6:"optset";a:1:{i:0;s:1:"2";}}';
    3.  
    4. $a1=unserialize($text1);
    5. echo'<pre>';
    6. print_r($a1);
    7. echo'</pre>';
    8. echo $a1['sku'];
    9. ?>

    выдал

    Array
    (
    [sku] => Jacuzzi Profile
    [description] => Jacuzzi Profile
    [shiprate] =>
    [featured] => no
    [sale] => no
    [cart_radio] => 1
    [optset] => Array
    (
    [0] => 2
    )

    )
    Jacuzzi Profile

    А вот содержимое ячейки не работает products.

    Код (Text):
    1. $text1 = '
    2. a:1:{
    3.     s:8:"products";a:4:{
    4.                             i:1;a:3:{
    5.                                 s:6:"option";s:44:"Бассейн комплектации BASE";
    6.                                 s:5:"price";s:6:"809000";
    7.                                 s:9:"saleprice";s:0:"";
    8.                                 }
    9.                             i:2;a:3:{
    10.                                 s:6:"option";s:43:"Бассейн комплектации TOP";
    11.                                 s:5:"price";s:6:"917800";
    12.                                 s:9:"saleprice";s:0:"";
    13.                                 }
    14.                             i:3;a:3:{
    15.                                 s:6:"option";s:23:"Крышка-чехол";
    16.                                 s:5:"price";s:5:"38400";
    17.                                 s:9:"saleprice";s:0:"";
    18.                                 }
    19.                             i:4;a:3:{
    20.                                 s:6:"option";s:33:"Утепление Winter Pro Kit";
    21.                                 s:5:"price";s:5:"33000";
    22.                                 s:9:"saleprice";s:0:"";
    23.                                 }
    24.                        }
    25.     }';
    26. $a1=unserialize($text1);
    27. echo'<pre>';
    28. print_r($a1);
    29. echo'</pre>';
    30. echo $a1['products'][1]['option'];
     
  13. jenya777777

    jenya777777 Активный пользователь

    С нами с:
    16 мар 2010
    Сообщения:
    562
    Симпатии:
    0
    Я так понимаю это какой то магазин, наверное у него уже есть стандартные функции по работе с товарами. Может тогда не надо тебе мучиться с этим массивом, тем более ты не очень понимаешь что делаешь, а почитаешь мануал к магазину?
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    У меня работает...
     
  15. vvdexter

    vvdexter Активный пользователь

    С нами с:
    19 мар 2013
    Сообщения:
    10
    Симпатии:
    0
    Сайт на Wordpress плагин магазина eShop. Но все эти заморочки для мне нужны для другого скрипта.

    Добавлено спустя 46 секунд:
    Скиньте пожалуйста файл со скриптом...

    Добавлено спустя 8 минут 47 секунд:
    А вот и ошибка s:6:"option";s:44:"Бассейн комплектации BASE"; указано что 44 символа, а на самом деле 25. Видимо он когда их записывал посчитал вместе с пробелами как-то так "Бассейн комплектации BASE " Но как теперь быть? на сайте ведь все функционирует значит есть какой-то способ?