PHP爆炸字符串,包含3个变量

时间:2015-10-28 13:27:04

标签: php regex

我有这个字符串:

132(250-1,4.50).133(750-1,6.50).134(650-1,7.50).135(550-1,8.50)

"。"定义一个新的"对象"。

使用第一个"对象"作为一个例子,我希望将每个值分解为数组,如下所示:

arrayids[] = 132;
arrayweight[132] => 250;
arraymeasur[132] => 1;
arrayprices[132] => 4.50;

这个时期只是定义了一个新对象。

我已经尝试过使用str_pos和其他类似的php函数来找到解决方案而我根本就不懂正则表达式 - 任何人都可以帮我解决这个问题吗?

感谢。

2 个答案:

答案 0 :(得分:3)

你需要很多explodes

并不难
<?php
$newArray = [];
$string = "132(250-1,4.50).133(750-1,6.50).134(650-1,7.50).135(550-1,8.50)";
$explString = explode(").", $string);

foreach($explString as $exStr){
  $explSubstr = explode("(", $exStr);

  $explFirst = explode("-", $explSubstr[1]);    
  $explRest = explode(",", $explFirst[1]);  

  $newArray[$explSubstr[0]] = [
      "weight" => $explFirst[0],
      "measure" => $explRest[0],
      "prices" => $explRest[1]
  ];
}

var_dump($newArray);

答案 1 :(得分:3)

<?php

$arrayids = $arrayweight = $arrayprices = [];

$str = '132(250-1,4.50).133(750-1,6.50).134(650-1,7.50).135(550-1,8.50)';

array_walk(explode(').', $str), function($segment) use (&$arrayids, &$arrayweight, &$arraymeasur, &$arrayprices) {
    if (preg_match('/^([0-9\.]+)\(([0-9\.]+)-([0-9\.]+),([0-9\.]+)/', $segment, $matches)) {
        $key = $matches[1];
        list(, $arrayids[], $arrayweight[$key], $arraymeasur[$key], $arrayprices[$key]) = $matches;
    }
});

var_dump($arrayids);
var_dump($arrayweight);
var_dump($arraymeasur);
var_dump($arrayprices);