2012-06-14 51 views
0

问题:爆炸串

我有一个字符串,它看起来像这样:

[1=>2,3,4][5=>6,7,8][9=>10,11,12][13=>14,15][16=>17,18] 

问:

你怎么能得到这个字符串进入这个?

1 
    2 
    3 
    4 
5 
    6 
    7 
    8 
9 
    10 
    11 
    12 
13 
    14 
    15 
16 
    17 
    18 
+0

您可以使用reg表达式和组 - 但正如Carsten所说,您到目前为止尝试了什么? – BugFinder

+1

也许没用:你好像试图用一个自定义的格式来序列化一个数组,看看php的serialize()或者json_encode() – AsTeR

回答

1
$str = "[1=>2,3,4][5=>6,7,8][9=>10,11,12][13=>14,15][16=>17,18]"; 
$str = explode("]", $str); 
$finalResult = array(); 

foreach ($str as $element) { 
    if (!empty($element)) { 
     $element = substr($element, 1); 
     $element = explode("=>", $element); 

     // element[0] contains the key 
     $element[1] = explode(",", $element[1]); 
     $finalResult[$element[0]] = $element[1]; 
    } 
} 

print_r($finalResult); 
2

我会尝试:

$input = '[1=>2,3,4][5=>6,7,8][9=>10,11,12][13=>14,15][16=>17,18]'; 
$output = array(); 

preg_match_all('\[(\d+)=>([\d,]+)\]', $input, $matches); 
foreach ($matches as $group) { 
    $output[$group[1])] = explode(',', $group[2]); 
} 

// and print result out: 

foreach ($output as $key => $val) { 
    echo $key . '<br/>'; 
    foreach ($val as $v) { 
    echo ' ' . $v . '<br/>'; 
    } 
} 
2

此代码:

$input = '[1=>2,3,4][5=>6,7,8][9=>10,11,12][13=>14,15][16=>17,18]'; 
$regex = '~\[(?P<keys>\d)+=>(?P<values>(?:\d+,?)+)\]~'; 
$result = array(); 

if (preg_match_all($regex, $input, $matches)) { 
    foreach ($matches['keys'] as $key => $value) { 
    $result[$value] = explode(',', $matches['values'][$key]); 
    } 
} 

print_r($result); 

结果如下:

Array 
(
    [1] => Array 
     (
      [0] => 2 
      [1] => 3 
      [2] => 4 
     ) 

    [5] => Array 
     (
      [0] => 6 
      [1] => 7 
      [2] => 8 
     ) 

    [9] => Array 
     (
      [0] => 10 
      [1] => 11 
      [2] => 12 
     ) 

    [3] => Array 
     (
      [0] => 14 
      [1] => 15 
     ) 

    [6] => Array 
     (
      [0] => 17 
      [1] => 18 
     ) 

) 
1
<?php 
$str = "[1=>2,3,4][5=>6,7,8][9=>10,11,12][13=>14,15][16=>17,18]"; 
$parts1 = explode("][",$str); 

$parts1[0]=str_replace("[","",$parts1[0]); 
$parts1[count($parts1)-1]=str_replace("]","",$parts1[count($parts1)-1]); 

foreach($parts1 as $k=>$v){ 
    $parts2[]=explode("=>",$v); 
} 

foreach($parts2 as $k=>$v){ 
    echo "<div>".$v[0]."</div>"; 
    foreach(explode(",",$v[1]) as $key=>$value){ 
     echo "<div style='margin-left:20px'>".$value."</div>"; 
    } 
} 

产出将是 enter image description here

1

只有str_replace()使用:

$dict = array(
    '=>' => "\n\t", 
    ',' => "\n\t", 
    '][' => "\n", 
    '[' => '', 
    ']' => '', 
); 

echo str_replace(array_keys($dict), array_values($dict), $str); 

会给你想要的结果。

+0

谢谢你的解决方案,但是我犯了一个错误,没有提到它应该在一个数组中。 – kexxcream