我有这个字符串:
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函数来找到解决方案而我根本就不懂正则表达式 - 任何人都可以帮我解决这个问题吗?
感谢。
答案 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);