Помогите разобраться возможно ли при использовании unserialize() вставлять переменные полученные динамическим путём!!! чтобы было понятно я хочу сделать следующее есть строка PHP: $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"'[b]main[/b]'";}}'; где "main" хочу заменить на PHP: $p[all]; при запуске unserialize(), со строкой PHP: $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"'.$p[all].'";}}'; у меня ошибку выдаёт!!!!
не надо заменять данные в сериализованной строке. Сериализация используется не для этого. подставьте свою переменную до serialize() или после unserialize().
а если переменная $p[all] меняется как ждый раз а срока $str остаётся неизменной за исключением как раз этой переменной???????
Все логично - вы нарушили структуру строки А почему бы сначала не десериализовать, а потом уже присваивать значения? PHP: <?php $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"\'main\'";}}'; $var = unserialize($str); $var['value'][0] = 'new main value'; var_dump($var);
$str используется в функии, которая на основании неё формирует запрос, результаты которого зависят как раз от переменной $p[all].
у меня получилось! $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"\'main\'";}}'; надо просто перед тем как отдавать $str на unserialize() переформатировать и убрать обратные слеши!!!!! после этого всё работает и можно вставлять динамические переменные!!! )))))
работает с ними когда ты вставляешь в PHP: $str = 'a:3:{s:1:"t";s:4:"back";s:4:"name";a:1:{i:0;s:6:"`link`";}s:5:"value";a:1:{i:0;s:6:"\'main\'";}}'; вместо main динамическую переменную?????
а какая разница? Слеши экранируют одинарные кавычки, потому что строка в одинарных кавычках. Ууу, батенька, я понял. У вас проблемы с синтаксисом строк. Читать срочно http://php.net/string в частности раздел Variable parsing А то вы полезли в сериализацию.
у меня данная строка $str используется в SQL запросе, который как раз и выстраивается из $str, вот поэтому мне и нужны лишнии кавычки
Alex_@ во-первых, это для сериализованных данных - достаточно бредовая идея. во-вторых, сходите и почитайте ссылку что я дал. Ноги ваших проблем растут оттуда.
вовсе не бредовая идея!!!! всё замечательно работает!!!!! при un-сериализации необходимо менять ещё и числовое значение, то-есть посчитать длину динамической переменной и вставить в $str
поиск по сериализованной строке в БД вы как собираетесь организовывать? P.S. рассказывать особенности формата используемого при сериализации мне не надо, я знаю как с ним работать.
я не собираюсь организовывать поиск по сериализованной строке в БД, это я считаю бессмысленно, да и ненужно!!! я использую сериализованную строку для хранения её в базе данных, которую в дальнейшем при извлечении её из БД подгружать необходимые данные(в данном случае формы и SQL-запросы, функции, аргументы к ним и т.п.) при определённых условиях, то-есть по пути по которому пользователь переходит, чтобы скрипт знал что ему делать!!!!
Что-то данный текст у меня не дешифруется. Но вопрос начала топика остается в силе - если сериализованная строка это некий шаблон чего-то, почему данные в него не подставлять уже в десериализовнном виде непосредственно перед использованием? И зачем хранить всю строку, а не отдельные данные, которые должны быть использованы/подставленны?
данная строка как раз и является теми данными, которые должны быть подставленны для использования! возмём к напримеру форму в которой есть данные которые при различных путях изменяются, так я лучше в сериализованную строку запишу пару функций которые уже мне будут вставлять данные в строку и после десериализации будет готовый массив для использования! у меня функция которая генерирует формы для одного и того же пути возвражает разные данные, в зависимости от переданного параметра.
ВНЕЗАПНО! PHP: <?php $v = serialize(array('black', 'orange', 'white')); $v = str_replace(serialize('white'), serialize('blue'), $v); print_r(unserialize($v));