массивы — Как извлечь эту информацию Переполнение стека

Как я могу правильно извлечь эту информацию в php?
Например, мне нужна информация о клиенте и идентификатор.

содержание
адреса доставки
валюта
покупатель
….

Спасибо

"sessiontoken|s:32:"6450a6e3ced9cdbc38c82e51376efc0f";ClicShoppingCart|a:5:{s:8:"contents";a:1:{i:21;a:1:{s:3:"qty";i:5;}}s:14:"sub_total_cost";i:0;s:10:"total_cost";i:0;s:12:"total_weight";d:0;s:16:"shipping_address";a:2:{s:7:"zone_id";s:3:"265";s:10:"country_id";s:2:"73";}}language|s:2:"fr";currency|s:3:"USD";new_products_id_in_cart|i:21;cart_country_id|s:2:"73";Shop|a:1:{s:17:"NavigationHistory";a:1:{s:8:"snapshot";N;}cart_address_id|N;sendto|i:24;customer_group_id|a:1:{s:18:"customers_group_id";s:1:"0";}customer|a:8:{s:2:"id";i:11;s:10:"first_name";s:4:"XXX";s:9:"last_name";s:7:"XXXXXX";s:13:"email_address";s:21:"[email protected]";s:9:"telephone";N;s:10:"country_id";i:38;s:7:"zone_id";i:76;s:18:"default_address_id";i:24;}cartID|s:5:"57448";billto|i:24;payment|s:21:"Payment\Desjardins\HO";comments|s:0:"";shipping|a:3:{s:2:"id";s:45:"colispostalprioritaire_colispostalprioritaire";s:5:"title";s:70:"Colis International Prioritaire (France) (Livraison vers CA : 0 Kg(s))";s:4:"cost";i:18;}coupon|s:0:"";"

-2

Решение

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

Я сделал эту работу для вас. Мой скрипт исправит ваши примерные данные (не гарантируется, что они будут эффективны на 100% для других ваших строк) и преобразует их в массив. Из полученного массива вы можете получить доступ к элементам напрямую с помощью ключа или цикла. Вы также можете использовать serialize() преобразовать его в действительную сериализованную строку данных для правильного будущего хранения / обработки.

демонстрация

Код:

$serialstring='sessiontoken|s:32:"6450a6e3ced9cdbc38c82e51376efc0f";ClicShoppingCart|a:5:{s:8:"contents";a:1:{i:21;a:1:{s:3:"qty";i:5;}}s:14:"sub_total_cost";i:0;s:10:"total_cost";i:0;s:12:"total_weight";d:0;s:16:"shipping_address";a:2:{s:7:"zone_id";s:3:"265";s:10:"country_id";s:2:"73";}}language|s:2:"fr";currency|s:3:"USD";new_products_id_in_cart|i:21;cart_country_id|s:2:"73";Shop|a:1:{s:17:"NavigationHistory";a:1:{s:8:"snapshot";N;}cart_address_id|N;sendto|i:24;customer_group_id|a:1:{s:18:"customers_group_id";s:1:"0";}customer|a:8:{s:2:"id";i:11;s:10:"first_name";s:4:"XXX";s:9:"last_name";s:7:"XXXXXX";s:13:"email_address";s:21:"[email protected]";s:9:"telephone";N;s:10:"country_id";i:38;s:7:"zone_id";i:76;s:18:"default_address_id";i:24;}cartID|s:5:"57448";billto|i:24;payment|s:21:"Payment\Desjardins\HO";comments|s:0:"";shipping|a:3:{s:2:"id";s:45:"colispostalprioritaire_colispostalprioritaire";s:5:"title";s:70:"Colis International Prioritaire (France) (Livraison vers CA : 0 Kg(s))";s:4:"cost";i:18;}coupon|s:0:""';
//var_export(unserialize($serialstring));  this fails because the string has errors in it

if(preg_match_all('/(\w+)\|(.*?)(?=(\w+)\||$)/',$serialstring,$matches)){
foreach($matches[1] as $i=>$k){
$v=$matches[2][$i];  // post-pipe group
if(preg_match_all('/s:(\d+):"([^"]*?)"/',$v,$matches2)){ // capture string lengths and values
foreach($matches2[1] as $i=>$len){
if(($newlen=strlen($matches2[2][$i]))!=$len){  // if bad string length count, fix it
$v=str_replace("s:{$len}:\"{$matches2[2][$i]}\"","s:{$newlen}:\"{$matches2[2][$i]}\"",$v);
}
}
}
if(substr_count($v,"{")>substr_count($v,"}")){ // if insufficient closing curly brackets, fix it
$v.=str_repeat("}",substr_count($v,"{")-substr_count($v,"}"));
}
if(!in_array(substr($v,-1),[";","}"])){
$v.=";"; // append semicolon where not ending in } or ;
}
$result[$k]=unserialize($v);
}
}
var_export($result);  // this is the array
echo "\n\n";
echo serialize($result);  // this is the valid serialized data string
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]