2012-06-14 3 views
0

문제 :브래킷과 세미콜론을 PHP에서 문자열을 폭발

I는 다음과 같습니다 문자열이 있습니다

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

출력은 str_replace() 사용 enter image description here

1

다음과 같습니다

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

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

원하는 결과를 줄 것이다.

+0

솔루션을 제공해 주셔서 감사합니다. 그러나 배열에 있어야한다는 언급은하지 않았습니다. – kexxcream