Разобрать отформатированную строку с несколькими разделителями в ассоциативный массив

Я использую модуль для создания заказов на бронирование на своем веб-сайте.

У них есть крючок, который я могу использовать, который срабатывает после создания нового бронирования.

Я получаю переменную booking_form: Внутри этой переменной находится следующее:

text^name1^PETER~text^secondname1^SMITH~text^phone1^023482348~text^adres1^STREETAVENUE 1B~text^postcode1^91201CA~text^woonplaats1^LIVINGPLACE~email^email1^[email protected]

Есть ли способ в PHP получить все значения всех полей в массиве или что-то в этом роде? Так что-то вроде этого?

array(
    name or name1? => PETER,
    secondname => SMITH,
    etc... => etc...
)

Таким образом, функция должна разбить строку на основе символов ^ и ~.

Для explode можно использовать очевидный шаблон: разделение на ~ для получения входных данных формы, разделение на ^ для получения group => field => value.

lolbas 06.07.2018 12:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
125
3

Ответы 3

Попробуй это :

$result = array();
$data = explode ( "~", $yourString )
foreach ( $data as $element)
{
    $elt = explode ( "^", $element ) ;
    $result[$elt[1]] = $elt[2];
}

В этом ответе отсутствует образовательное объяснение.

mickmackusa 19.04.2021 23:36

Другой способ сделать это ...

$input = 'text^name1^PETER~text^secondname1^SMITH~text^phone1^023482348~text^adres1^STREETAVENUE 1B~text^postcode1^91201CA~text^woonplaats1^LIVINGPLACE~email^email1^[email protected]';

$split = explode('~', $input);
$finalArray = [];

foreach($split as $thing) {
    list ($type, $key, $value) = explode('^', $thing);
    $finalArray[$key] = $value;
}

print_r($finalArray);

В этом ответе отсутствует образовательное объяснение.

mickmackusa 19.04.2021 23:36

Кажется, что ваша отформатированная строка отформатирована непоследовательно, и я не понимаю релевантности маркеров text и email.

Кроме того, мы не знаем, что ваши входные данные могут отличаться, потому что вы дали нам только одну строку и мы не знаем точного желаемого результата, потому что вы "ятта-ятта" сделали то, что ожидали.

Тем не менее, синтаксический анализ строки может выполняться с помощью регулярного выражения.

  • Сопоставьте текст или метку электронной почты, за которой следует буквальная вставка
  • Захватить один или несколько символов без каретки
  • Соответствует буквальному символу каретки
  • Захватить ноль или более символов без каретки / без тильды

Код: (Демо)

$string = 'text^name1^PETER~text^secondname1^SMITH~text^phone1^023482348~text^adres1^STREETAVENUE 1B~text^postcode1^91201CA~text^woonplaats1^LIVINGPLACE~email^email1^[email protected]';

preg_match_all('/(?:text|email)\^([^^]+)\^([^^~]*)/', $string, $matches, PREG_SET_ORDER);
var_export(
    array_column($matches, 2, 1)
);

Выход:

array (
  'name1' => 'PETER',
  'secondname1' => 'SMITH',
  'phone1' => '023482348',
  'adres1' => 'STREETAVENUE 1B',
  'postcode1' => '91201CA',
  'woonplaats1' => 'LIVINGPLACE',
  'email1' => '[email protected]',
)

Другие вопросы по теме