Я использую модуль для создания заказов на бронирование на своем веб-сайте.
У них есть крючок, который я могу использовать, который срабатывает после создания нового бронирования.
Я получаю переменную 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...
)
Таким образом, функция должна разбить строку на основе символов ^ и ~.






Попробуй это :
$result = array();
$data = explode ( "~", $yourString )
foreach ( $data as $element)
{
$elt = explode ( "^", $element ) ;
$result[$elt[1]] = $elt[2];
}
В этом ответе отсутствует образовательное объяснение.
Другой способ сделать это ...
$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);
В этом ответе отсутствует образовательное объяснение.
Кажется, что ваша отформатированная строка отформатирована непоследовательно, и я не понимаю релевантности маркеров 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]',
)
Для
explodeможно использовать очевидный шаблон: разделение на~для получения входных данных формы, разделение на^для полученияgroup => field => value.