2013-05-15 4 views
1

문자열 :두 번 폭발 배열

user:hello,user2:world 

원하는 출력 :

$string = array(
    1 => array(1 => "user", 2 => "hello"), 
    2 => array(1 => "user2", 2 => "world") 
); 

나는 (작동하지 않는) 시도했다 :

$string = explode(',',$string); 
$string = explode(':',$string); 

오류 I을 get : explode() expects parameter 2 to be string
어떻게 문자열을 원하는 출력으로 가져올 수 있습니까? 감사!

+0

이 .................이 질문을 기대하지 않았다, 사용 foreach는 루프 후 폭발 그런 다음 다시 폭발하십시오 ... – HamZa

+0

첫 번째 출력에서 ​​루프가 반복되고 각 값에서 두 번째 시간이 폭발합니다. –

+0

문자열을 폭발 시키면 문자열이 아닌 문자열 배열 –

답변

5

루프 폭발 각 값에 두 번 분해.

$string = "user:hello,user2:world"; 
$array = explode(',', $string); 

foreach($array as $k=>$v){ 
    $array[$k] = explode(':', $v); 
} 
+0

완벽. 감사! 7 분 안에 수락 할 것입니다. – Mooseman

+0

단지 하나의 개선이 필요합니다 :'foreach ($ array as & $ v) $ v = 폭발 (':', $ v);'http://codepad.viper-7.com/5ExRH1 참조 – michi

+0

그가 키를 통해 값을 재 할당 할 때 $ v를 참조하십시오. 어느 쪽이든 정직하게 작동합니다. –

0

example of user from manual을 사용할 수 있습니다. 최초의 출력 위에

function multiexplode ($delimiters,$string) { 
    $ary = explode($delimiters[0],$string); 
    array_shift($delimiters); 
    if($delimiters != NULL) { 
     foreach($ary as $key => $val) { 
      $ary[$key] = multiexplode($delimiters, $val); 
     } 
    } 
    return $ary; 
} 

// Example of use 
$string = "1-2-3|4-5|6:7-8-9-0|1,2:3-4|5"; 
$delimiters = Array(",",":","|","-"); 

$res = multiexplode($delimiters,$string); 
echo '<pre>'; 
print_r($res); 
echo '</pre>'; 
3

이 시도하십시오

$string = 'user:hello,user2:world'; 
$output = explode(',',$string); 
foreach ($output as &$e) { 
    $e = explode(':', $e); 
} 
print_r($output); 
+0

'foreach' 후에'unset ($ e);'를하는 것을 잊지 마십시오. 새로운 문제가 발생할 수 있습니다. – mpyw

1
<?php 

$string = "user:hello,user2:world"; 

$array = array_map(function ($input) { 
    return explode(':',$input); 
}, explode(',', $string)); 

print_r($array);