-2

我有一个字符串

pid1+2+price1+20+qty1+2+pid2+3+price2+20+qty2+1+

这是一些处理的结果......我需要创建应该像的数组

pid1->2
price1->20
qty1->2(first array)

pid2->2
price2->20
qty2->2(Second array)

我尝试使用爆炸,但没有实现...谢谢

上面的字符串是由代码创建的

$a = var_export($_REQUEST);
foreach ($_REQUEST as $key=>$value) 
{
    $a = $key . "+" . $value . "+";
    echo $a;
}
4

5 回答 5

3

尝试这个 :

$str  = "pid1+2+price1+20+qty1+2+pid2+3+price2+20+qty2+1+";

preg_match_all('/(?P<var>\w+)\+(?P<digit>\d+)/',$str,$macth);
$res   = array_chunk(array_combine($macth['var'],$macth['digit']),3,TRUE);

echo "<pre>";
print_r($res);

输出 :

Array
(
    [0] => Array
        (
            [pid1] => 2
            [price1] => 20
            [qty1] => 2
        )

    [1] => Array
        (
            [pid2] => 3
            [price2] => 20
            [qty2] => 1
        )

)
于 2013-03-26T12:21:44.137 回答
1
$string = "pid1+2+price1+20+qty1+2+pid2+3+price2+20+qty2+1+";
$parts = explode ('+' , $string);

$data = array();
$c = 0;
for ($i = 0; $i < sizeof($parts); $i++) {
$data[$c][$parts[$i]] = $parts[++$i];
$data[$c][$parts[++$i]] = $parts[++$i];
$data[$c][$parts[++$i]] = $parts[++$i];
$c++;
}
echo '<pre>';
var_dump($data);
echo '</pre>';

可以这样做。

输出为: // 使用 rtrim($string, '+'),避免最后一个空数组

array(3) {
  [0]=>
  array(3) {
    ["pid1"]=>
    string(1) "2"
    ["price1"]=>
    string(2) "20"
    ["qty1"]=>
    string(1) "2"
  }
  [1]=>
  array(3) {
    ["pid2"]=>
    string(1) "3"
    ["price2"]=>
    string(2) "20"
    ["qty2"]=>
    string(1) "1"
  }
  [2]=>
  array(1) {
    [""]=>
    NULL
  }
}
于 2013-03-26T12:19:59.863 回答
1

如果您可以更改创建 $a 的方式,请执行以下操作:

foreach($_REQUEST as $key=>$value) 
    $a[$key]=$value;

如果您必须按原样工作$a,请执行以下操作:

$a = explode('+',$a);
$max = count($a);

for ($i = 0; $i < $max; $i += 2)

    $b[$a[$i]] = $a[$i+1];

var_dump($b);
于 2013-03-26T12:17:29.333 回答
1

所以这是我的解决方案:您可以使用 explode 按+字符拆分字符串,然后将每个值交替作为新数组的键和值。

$str = 'pid1+2+price1+20+qty1+2+pid2+3+price2+20+qty2+1+';
$split = explode("+",$str);
$final = array();
$lastKey = '';
foreach ($split as $index => $value) {
  if ($value){ // don't store empty values
    if ($index % 2 == 0){ // this is the alternation (odd/even index)
      $lastKey = $value;  // save the key for the next value
      $final[$value] = ''; // initialize the element for the next value
    }else{
      $final[$lastKey] = $value; // set the value for the previous key
    }
  }
}
于 2013-03-26T12:22:41.510 回答
1

你可以试试这个

<?php
//$_REQUEST Array is here termed as $reqArr
$reqArr['pid1'] = '2';
$reqArr['price1'] = '20';
$reqArr['qty1'] = '1';
$reqArr['pid2'] = '3';
$reqArr['price2'] = '40';
$reqArr['qty2'] = '2';

$loopCount = sizeof($reqArr)/3; // 3 is the count of items per array (ie pid, price & qty here)
for($i = 1; $i <= $loopCount; $i++) {
    $finalArr[$i]['pid'.$i] = $reqArr['pid'.$i];
    $finalArr[$i]['price'.$i] = $reqArr['price'.$i];
    $finalArr[$i]['qty'.$i] = $reqArr['qty'.$i];
}
echo '<pre>';
print_r($finalArr);
?>

结果将是

Array
(
    [1] => Array
        (
            [pid1] => 2
            [price1] => 20
            [qty1] => 1
        )

    [2] => Array
        (
            [pid2] => 3
            [price2] => 40
            [qty2] => 2
        )

)
于 2013-03-26T12:34:16.837 回答