使用表单字段分割字符串

时间:2018-07-06 10:07:59

标签: php arrays string

我正在使用一个模块在我的网站上创建预订单。

他们有一个钩子,我可以使用它创建新的预订后触发。

我得到的变量是booking_form: 在此变量内的内容如下:

text^name1^PETER~text^secondname1^SMITH~text^phone1^023482348~text^adres1^STREETAVENUE 1B~text^postcode1^91201CA~text^woonplaats1^LIVINGPLACE~email^email1^peter@example.com

PHP是否有某种方式可以获取数组中所有字段的所有值或其他内容?像这样吗?

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

因此该函数必须根据^和〜字符分割字符串。

3 个答案:

答案 0 :(得分:0)

尝试一下:

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

答案 1 :(得分:0)

另一种方法...

$input = 'text^name1^PETER~text^secondname1^SMITH~text^phone1^023482348~text^adres1^STREETAVENUE 1B~text^postcode1^91201CA~text^woonplaats1^LIVINGPLACE~email^email1^peter@example.com';

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

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

print_r($finalArray);

答案 2 :(得分:0)

您的格式化字符串的格式似乎不一致,我不明白 textemail 标记的相关性。

此外,我们不知道您的输入数据可能会有所不同,因为您只给了我们一个和字符串,而且我们不知道您确切想要的输出,因为您“yatta-yatta”符合您的期望。

也就是说,可以使用正则表达式来解析字符串。

  • 匹配后跟文字脱字符的文本或电子邮件标签
  • 捕获一个或多个非插入字符
  • 匹配文字插入符
  • 捕获零个或多个非插入符号/非波浪号字符

代码:(Demo)

$string = 'text^name1^PETER~text^secondname1^SMITH~text^phone1^023482348~text^adres1^STREETAVENUE 1B~text^postcode1^91201CA~text^woonplaats1^LIVINGPLACE~email^email1^peter@example.com';

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' => 'peter@example.com',
)