Своя функция упаковки данных

Статус
В этой теме нельзя размещать новые ответы.

Priler

WEB Developer
Здравствуйте!
Есть код(сырой):
PHP:
function pack_array($array) {
    if(!$array OR gettype($array)!='array') return False;
    //GO
    $tglue='>>>({[-_-*-_-]})<<<';
    foreach($array as $key=>$val) {
        if(gettype($val)!='array'):
        $out.=str_replace('|',$tglue,$key).'|'.str_replace('|',$tglue,$val);
        else:
        $out.=pack_array($val);
        endif;
    }
return $out;
}
Вопрос:
Что можно использовать заместо столбика | что бы реализовать поставленную задачу, ведь когда я буду писать функцию расшифровки полученных данных, нужно будет решать этот вопрос, поскольку в кодируемых данных может быть символ столбца.
Как-бы Вы решили эту задачу?

P.s. Забудем на время о функциях serialize() и unserialize()
 

Priler

WEB Developer
да что угодно, все равно экранировать придется - в кодируемых данных, очевидно, может быть любой символ

посмотри в сторону http://de3.php.net/manual/en/function.str-getcsv.php
Как что угодно, если во входных есть символ | то получается когда я буду раскодировать данные функция разрешит то что рядом с | , хотя по сути это не является разделителем
 

Vladson

Сильнобухер
Забудем на время о функциях serialize() и unserialize()
Вот как-то так...

А вообще смотри как это делают другие, и учись (матрёшка сама по себе массив, в трекерах используется тоже аналогичная штука, её там bencode зовут, сам serialize посмотри как работает, итд)
 

GoodLuck777

Новичок
Ну либо ты используешь символ которого 100% не будет в данных, либо ты его экранируешь, логично же?
 

Vladson

Сильнобухер
Ну есть и другие подходы (как в serialize, пишешь длинну строки и берёшь её целиком ничего не меняя)
 

keltanas

marty cats
Priler
Ты бы написал, для чего тебе это надо, какие данные хочешь сериализовать и чем не устроили serialize, json_encode или var_export?
Или это у тебя элегантный сферический сериализатор в вакууме?
 

Priler

WEB Developer
Priler
Ты бы написал, для чего тебе это надо, какие данные хочешь сериализовать и чем не устроили serialize, json_encode или var_export?
Или это у тебя элегантный сферический сериализатор в вакууме?
Да так просто, для повышения уровня знаний
 

Vladson

Сильнобухер
для повышения уровня
для этого надо не велосипеды изобретать, а разбирать уже существующие... попробуй реализовать готовые (serialize, json_encode или var_export) только сам. По пути поймёшь как работают, да и практики наберёшься...
 

keltanas

marty cats
Priler
Есть смысл делать свой сериализатор, если тебе надо, чтобы на каких-то специфических данных ты смог получить лучшие параметры по сравнению с существующими способами. Например, по скорости упаковки, по итоговому размеру для совместимости с другими платформами. Ну или в школе задали задачу.
А так ты пишешь код, даже не понимая для чего?
 

hell0w0rd

Продвинутый новичок
О кстати.. подскажите пожалуйста как в регулярках учитывать экранирование?)
Допустим мне надо markdown распарсить, там `` можно экранировать, например `field \`id\`` должно распарситься в <code>field `id`</code>
 

Priler

WEB Developer
Priler
Есть смысл делать свой сериализатор, если тебе надо, чтобы на каких-то специфических данных ты смог получить лучшие параметры по сравнению с существующими способами. Например, по скорости упаковки, по итоговому размеру для совместимости с другими платформами. Ну или в школе задали задачу.
А так ты пишешь код, даже не понимая для чего?
Я пишу код просто для того, что бы проверить что да как, и вообще я затратил на эту идею всего 15 минут, 10 минут написания кода + 5 минут создание темы.
Так что особый приоритет я этому делу не придаю
 

keltanas

marty cats
Priler
Т.е. вместо того, чтобы заниматься чем-то полезным, ты сидел и выдумывал, что бы такое спросить на форуме?
 

Priler

WEB Developer
Priler
Т.е. вместо того, чтобы заниматься чем-то полезным, ты сидел и выдумывал, что бы такое спросить на форуме?
Нет, я читал книгу по PHP и там была такая темка и задача сформировать свой упаковщик, типа serialize.
Именно упаковщик массивов, ну и по возможности любых других данных.
Задачу я в принципе выполнил довольно быстро, единственное вот такой вот минус у функции, что не знаю какой символ поставить при кодировании массивов, что бы потом нормально восстановить.
 

fixxxer

К.О.
Партнер клуба
тебе уже объяснили 10 раз, что никакой, и варианта 2 - либо экранировать символ в данных, либо вместо разделителя вставлять длины

задание ты не выполнил
 

keltanas

marty cats
задание ты не выполнил
)))

Priler
Ну ты в следующий раз так и поясняй, что в какой-то книжке что-то вычитал и хочешь это проверить. А то можно много чего придумать на счет твоих мотивов ))
А самое главное, что решение как правило зависит именно исходя их них.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху