0

我有一个循环,它返回如下所示的字符串......

  • s:20:"D111 免费送货**";s:4:"0.00"
  • s:32:"D111 3/5 天送货服务***";s:4:"6.99"
  • s:32:"D111 2/3 天送货服务***";s:4:"8.99"

我有正则表达式从第一组引号中获取内容。

$shipping_name = preg_match('/"(.+?)"/', $shipp_option, $matches);

但我也想得到第二组引号内的数字,我该怎么做?

谢谢

4

2 回答 2

3

explode()分隔符上的字符串;,然后unserialize()它们:

$string = 's:20:"D111 Free Delivery**";s:4:"0.00"';
$array = explode( ';', $string);
list( $str, $number) = array_map( 'unserialize', $array);
echo $str . ' ' . $number;

您可以在这个演示中看到它的工作,对于您的三个测试用例,输出:

D111 Free Delivery**
0.00
D111 3/5 day delivery service***
6.99
D111 2/3 day delivery service***
8.99

编辑以显示如何在其自己的变量中捕获每个字段。

于 2012-10-31T17:08:20.193 回答
0

爆炸!!!!

//inside your loop
    $halves = explode(';', $shipp_option);
    $first_half = explode(':', $halves[0]);
    $second_half = explode(':', $halves[1]);
    $shipping_name = trim($first_half[2], '"');//eg. D111 Free Delivery**
    $shipping_price = trim($second_half[2], '"');//eg. 0.00
//end inside your loop

或者……快一点:

//inside your loop
    $shipp_arr = explode(';:', $shipp_option);
    $shipping_name = trim($shipp_arr[2], '"');//eg. D111 Free Delivery**
    $shipping_price = trim($shipp_arr[5], '"');//eg. 0.00
//end inside your loop
于 2012-10-31T17:21:57.657 回答