разделение строки в php как массив

У меня есть строка

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

Попробуй это :

 $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 ) ) 

Если вы можете изменить способ создания $ 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); 
 $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 } } 

Итак, вот мое решение: вы можете использовать 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 } } } 

Вы можете попробовать это

 <?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 ) )