парсинг строки в массив (['class': 'navigation', 'id': 'navigation']) - PullRequest
0 голосов
/ 27 февраля 2011

Любой может предложить альтернативный способ разбора строки: (['class': 'navigation', 'id': 'navigation']).

Я использовал для:

if(strpos($match[1], '[') === 0)
{
    $render = array();

    foreach(explode(',', substr($match[1], 1, -1)) as $arr)
    {
        $parts  = explode(':', $arr);

        if(count($parts) == 2)
        {
            $render[substr(trim($parts[0]), 1, -1)] = substr(trim($parts[1]), 1, -1);
        }
        else
        {
            $render[]   = substr(trim($parts[0]), 1, -1);
        }
    }

    $args[] = $render;
}
elseif(strpos($match[1], "'") == 0)
{
    $args[] = substr($match[1], 1, -1);
}

Тем не менее, это не займет много времени, чтобы понять недостатки этого метода, например, ['title': 'Tom's дневник'] полностью потерпел бы неудачу в коде.

Было бы также неплохо иметь возможность идентифицировать ошибочные записи и пропустить их. На данный момент все, что я делаю, это использую: |{{([^}]+)}}|, чтобы перехватить все функции, которые выглядят так: {{foo}}, {{foo ('test', 'best')}} или {{foo (['array') : 'бар'])}}. Если у вас есть быстрое решение, я буду признателен, если вы поделитесь им.

Ответы [ 2 ]

4 голосов
/ 27 февраля 2011

Формат вашей строки, кажется, не слишком далек от JSON - даже если он не кажется настоящим JSON (вы используете [] вместо {}, окружите то, что кажется быть объектом) .

Может быть, вы могли бы изменить свой формат, чтобы использовать JSON?


Это позволит вам использовать функции json_encode() и json_decode().

И все больше людей смогут работать с вашими данными, как если бы вы использовали стандартный формат.

1 голос
/ 27 февраля 2011

Это строка json, просто используйте json_decode , чтобы разобрать ее в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...