将php中的字符串拆分为数组

时间:2013-03-26 12:10:57

标签: php arrays split

我有一个字符串

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;
}

5 个答案:

答案 0 :(得分: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
        )

)

答案 1 :(得分: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);

答案 2 :(得分: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
  }
}

答案 3 :(得分: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
    }
  }
}

答案 4 :(得分: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
        )

)