Подскажите что это за формат данных, и какими инструментами его можно анализировать?

Eneidaplos

Новичок
Есть каталог заказов в интернет магазине на самописной CMS. К каждому заказу в ячейке записан код, который содержит ID товаров в этом заказе.

Мне для аналитики, мне нужно извлечь ID товаров, по каждому заказу, и я столкнулся с проблемой т.к. они хранятся странным для меня образом:

Ниже пример кода для заказа, который содержит 3 товара.
id - товаров - выделил жирным.


a:3:{

i:464;a:25:

{s:3:"cnt";i:3;s:2:"id";s:3:"464";s:9:"parent_id";s:3:"481";s:9:"modobject";s:10:"theCatalog";s:8:"symbolic";s:0:"";s:4:"name";s:51:"Манжета пластиковая МР-512 (ИЖ-38, МР-53, МР-60/61)";s:9:"is_folder";s:1:"0";s:11:"folderlevel";s:1:"0";s:7:"visible";s:1:"1";s:6:"weight";s:1:"0";s:10:"timechange";s:19:"2014-07-17 18:01:32";s:15:"allowaccessonly";s:0:"";s:11:"mainitem_id";s:1:"0";s:7:"extcode";s:3:"208";s:10:"timecreate";s:10:"1361793656";s:10:"name_post1";s:43:"МР-40 (Манжета плс. улучшенная для МР-512М)";s:10:"name_post2";s:44:"Манжета поршня пл. МР-512, 38, 53, 61 52500";s:13:"articul_post1";s:0:"";s:13:"articul_post2";s:0:"";s:4:"post";s:2:"ТЦ";s:13:"post_priority";s:1:"1";s:10:"hand_price";s:1:"0";s:10:"not_delete";s:1:"0";s:5:"price";d:27;s:11:"price_print";s:5:"27,00";}

i:486;a:25:

{s:3:"cnt";i:1;s:2:"id";s:3:"486";s:9:"parent_id";s:3:"482";s:9:"modobject";s:10:"theCatalog";s:8:"symbolic";s:0:"";s:4:"name";s:24:"Досылатель МР-60 (ИЖ-60)";s:9:"is_folder";s:1:"0";s:11:"folderlevel";s:1:"0";s:7:"visible";s:1:"1";s:6:"weight";s:1:"0";s:10:"timechange";s:19:"2014-09-05 11:53:25";s:15:"allowaccessonly";s:0:"";s:11:"mainitem_id";s:1:"0";s:7:"extcode";s:3:"304";s:10:"timecreate";s:10:"1361797021";s:10:"name_post1";s:32:"МР-60 (Досылатель СБ3-01) пасп.4";s:10:"name_post2";s:23:"Досылатель ИЖ-60 52645";s:13:"articul_post1";s:5:"52645";s:13:"articul_post2";s:0:"";s:4:"post";s:7:"Импульс";s:13:"post_priority";s:1:"1";s:10:"hand_price";s:1:"0";s:10:"not_delete";s:1:"0";s:5:"price";d:158;s:11:"price_print";s:6:"158,00";}

i:488;a:25:

{s:3:"cnt";i:1;s:2:"id";s:3:"488";s:9:"parent_id";s:3:"482";s:9:"modobject";s:10:"theCatalog";s:8:"symbolic";s:0:"";s:4:"name";s:31:"Кольцо досылателя МР-60 (ИЖ-60)";s:9:"is_folder";s:1:"0";s:11:"folderlevel";s:1:"0";s:7:"visible";s:1:"1";s:6:"weight";s:1:"0";s:10:"timechange";s:19:"2014-09-05 11:53:25";s:15:"allowaccessonly";s:0:"";s:11:"mainitem_id";s:1:"0";s:7:"extcode";s:3:"307";s:10:"timecreate";s:10:"1361797053";s:10:"name_post1";s:32:"МР-60 (Кольцо досылателя) пасп.3";s:10:"name_post2";s:36:"Кольцо досылателя ИЖ-60 Иж-60 52669";s:13:"articul_post1";s:5:"52669";s:13:"articul_post2";s:0:"";s:4:"post";s:7:"Импульс";s:13:"post_priority";s:1:"1";s:10:"hand_price";s:1:"0";s:10:"not_delete";s:1:"0";s:5:"price";d:30;s:11:"price_print";s:5:"30,00";}

}
 

Eneidaplos

Новичок
Код:
$aaa = mysql_query("SELECT basketdata FROM catalog_orders WHERE id='38003'");
$bbb = mysql_fetch_array($aaa);

echo $bbb[0];    // выводится пример кода который я приводил выше
$ccc = unserialize($bbb[0]);

foreach($ccc as $value)
{
  echo $value;
}
А вот цикл не работает. Ошибка: Invalid argument supplied for foreach()
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Eneidaplos, надо посмотреть что же лежит у тебя в переменной $ccc, в этом тебе поможет var_dump
 

peon

Lok'tar ogar
false, когда формат некорректный для десериализации
если значение содержит ", ', :, или ;
если длинна строки или количество элементов массива не соответствует указанной
то формат станет некорректный
 

peon

Lok'tar ogar
советую глянуть как в корзину товары выводить эта цмс
 

Активист

Активист
Команда форума
PHP:
Notice: unserialize(): Error at offset 0 of 2530 bytes in /var/www/timeline.localhost/httpdocs/test.php on line 30
Before fix: false

After fix: array (
464 =>
array (
'cnt' => 3,
'id' => '464',
'parent_id' => '481',
'modobject' => 'theCatalog',
'symbolic' => '',
'name' => 'Манжета пластиковая МР-512 (ИЖ-38, МР-53, МР-60/61)',
'is_folder' => '0',
'folderlevel' => '0',
'visible' => '1',
'weight' => '0',
'timechange' => '2014-07-17 18:01:32',
'allowaccessonly' => '',
'mainitem_id' => '0',
'extcode' => '208',
'timecreate' => '1361793656',
'name_post1' => 'МР-40 (Манжета плс. улучшенная для МР-512М)',
'name_post2' => 'Манжета поршня пл. МР-512, 38, 53, 61 52500',
'articul_post1' => '',
'articul_post2' => '',
'post' => 'ТЦ',
'post_priority' => '1',
'hand_price' => '0',
'not_delete' => '0',
'price' => 27,
'price_print' => '27,00',
),
486 =>
array (
'cnt' => 1,
'id' => '486',
'parent_id' => '482',
'modobject' => 'theCatalog',
'symbolic' => '',
'name' => 'Досылатель МР-60 (ИЖ-60)',
'is_folder' => '0',
'folderlevel' => '0',
'visible' => '1',
'weight' => '0',
'timechange' => '2014-09-05 11:53:25',
'allowaccessonly' => '',
'mainitem_id' => '0',
'extcode' => '304',
'timecreate' => '1361797021',
'name_post1' => 'МР-60 (Досылатель СБ3-01) пасп.4',
'name_post2' => 'Досылатель ИЖ-60 52645',
'articul_post1' => '52645',
'articul_post2' => '',
'post' => 'Импульс',
'post_priority' => '1',
'hand_price' => '0',
'not_delete' => '0',
'price' => 158,
'price_print' => '158,00',
),
488 =>
array (
'cnt' => 1,
'id' => '488',
'parent_id' => '482',
'modobject' => 'theCatalog',
'symbolic' => '',
'name' => 'Кольцо досылателя МР-60 (ИЖ-60)',
'is_folder' => '0',
'folderlevel' => '0',
'visible' => '1',
'weight' => '0',
'timechange' => '2014-09-05 11:53:25',
'allowaccessonly' => '',
'mainitem_id' => '0',
'extcode' => '307',
'timecreate' => '1361797053',
'name_post1' => 'МР-60 (Кольцо досылателя) пасп.3',
'name_post2' => 'Кольцо досылателя ИЖ-60 Иж-60 52669',
'articul_post1' => '52669',
'articul_post2' => '',
'post' => 'Импульс',
'post_priority' => '1',
'hand_price' => '0',
'not_delete' => '0',
'price' => 30,
'price_print' => '30,00',
),
)


<?php

error_reporting(E_ALL);
ini_set("display_errors", "on");

// Input data
$source = <<<DATA
"a:3:{

i:464;a:25:

{s:3:"cnt";i:3;s:2:"id";s:3:"464";s:9:"parent_id";s:3:"481";s:9:"modobject";s:10:"theCatalog";s:8:"symbolic";s:0:"";s:4:"name";s:51:"Манжета пластиковая МР-512 (ИЖ-38, МР-53, МР-60/61)";s:9:"is_folder";s:1:"0";s:11:"folderlevel";s:1:"0";s:7:"visible";s:1:"1";s:6:"weight";s:1:"0";s:10:"timechange";s:19:"2014-07-17 18:01:32";s:15:"allowaccessonly";s:0:"";s:11:"mainitem_id";s:1:"0";s:7:"extcode";s:3:"208";s:10:"timecreate";s:10:"1361793656";s:10:"name_post1";s:43:"МР-40 (Манжета плс. улучшенная для МР-512М)";s:10:"name_post2";s:44:"Манжета поршня пл. МР-512, 38, 53, 61 52500";s:13:"articul_post1";s:0:"";s:13:"articul_post2";s:0:"";s:4:"post";s:2:"ТЦ";s:13:"post_priority";s:1:"1";s:10:"hand_price";s:1:"0";s:10:"not_delete";s:1:"0";s:5:"price";d:27;s:11:"price_print";s:5:"27,00";}

i:486;a:25:

{s:3:"cnt";i:1;s:2:"id";s:3:"486";s:9:"parent_id";s:3:"482";s:9:"modobject";s:10:"theCatalog";s:8:"symbolic";s:0:"";s:4:"name";s:24:"Досылатель МР-60 (ИЖ-60)";s:9:"is_folder";s:1:"0";s:11:"folderlevel";s:1:"0";s:7:"visible";s:1:"1";s:6:"weight";s:1:"0";s:10:"timechange";s:19:"2014-09-05 11:53:25";s:15:"allowaccessonly";s:0:"";s:11:"mainitem_id";s:1:"0";s:7:"extcode";s:3:"304";s:10:"timecreate";s:10:"1361797021";s:10:"name_post1";s:32:"МР-60 (Досылатель СБ3-01) пасп.4";s:10:"name_post2";s:23:"Досылатель ИЖ-60 52645";s:13:"articul_post1";s:5:"52645";s:13:"articul_post2";s:0:"";s:4:"post";s:7:"Импульс";s:13:"post_priority";s:1:"1";s:10:"hand_price";s:1:"0";s:10:"not_delete";s:1:"0";s:5:"price";d:158;s:11:"price_print";s:6:"158,00";}

i:488;a:25:

{s:3:"cnt";i:1;s:2:"id";s:3:"488";s:9:"parent_id";s:3:"482";s:9:"modobject";s:10:"theCatalog";s:8:"symbolic";s:0:"";s:4:"name";s:31:"Кольцо досылателя МР-60 (ИЖ-60)";s:9:"is_folder";s:1:"0";s:11:"folderlevel";s:1:"0";s:7:"visible";s:1:"1";s:6:"weight";s:1:"0";s:10:"timechange";s:19:"2014-09-05 11:53:25";s:15:"allowaccessonly";s:0:"";s:11:"mainitem_id";s:1:"0";s:7:"extcode";s:3:"307";s:10:"timecreate";s:10:"1361797053";s:10:"name_post1";s:32:"МР-60 (Кольцо досылателя) пасп.3";s:10:"name_post2";s:36:"Кольцо досылателя ИЖ-60 Иж-60 52669";s:13:"articul_post1";s:5:"52669";s:13:"articul_post2";s:0:"";s:4:"post";s:7:"Импульс";s:13:"post_priority";s:1:"1";s:10:"hand_price";s:1:"0";s:10:"not_delete";s:1:"0";s:5:"price";d:30;s:11:"price_print";s:5:"30,00";}

}"
DATA;


// HTML pre
print "<pre>";

// Before fix
print "<p><strong>Before fix</strong>: " . var_export( unserialize( $source ), true ) . "</p>";


// Trim quote begin and end str
$source = trim( $source, "\"");

// Replace new line symbol
$source = str_replace("\n", "", $source);

// Fix string length after new line replacement
$source = preg_replace_callback('/s:([0-9]+):"(.*?)"/', function($match) {
  
    return "s:" . strlen($match[2]) . ":\"".$match[2]."\"";
  
}, $source);

print "<p><strong>After fix</strong>: " . var_export( unserialize( $source ), true ) . "</p>";


// Self printer!
highlight_file( __FILE__);
ЗЫ: спасибо за код в карман не положишь :D
 

peon

Lok'tar ogar
Активист

Notice: unserialize(): Error at offset 5 of 2530 bytes in E:\wamp\data\localweb\testunser.php on line 48
After fix
: false

странно у меня не работает, PHP 5.4.24
регулярка обрабатывает вроде
не могу понять причину, что не так

скинь, пожалуйста, сюда содержимое $source

print "<p><strong>After fix</strong>: " . var_export( unserialize( $source ), true ) . "</p>";
 

Активист

Активист
Команда форума
Активист

Notice: unserialize(): Error at offset 5 of 2530 bytes in E:\wamp\data\localweb\testunser.php on line 48
After fix
: false

странно у меня не работает, PHP 5.4.24
регулярка обрабатывает вроде
не могу понять причину, что не так

скинь, пожалуйста, сюда содержимое $source

print "<p><strong>After fix</strong>: " . var_export( unserialize( $source ), true ) . "</p>";
Заменить
PHP:
$source = str_replace( "\n", "", $source);
на
PHP:
$source = str_replace( array("\n", "\r"), "", $source );
 

fixxxer

К.О.
Партнер клуба
Мне одному кажется, что ТС понаставил переносов строк при копипасте на форум, когда "выделял жирным"? :)
 
Сверху