2012-12-11 6 views
0

다음은 연락처 정보를 보유하는 String입니다. 이 문자열은 동적입니다. 예를 들어 휴대 전화 번호가 합산되거나 이전 입력란에 다음과 같은 새로운 필드가 추가 될 수 있습니다. 전화 번호가 삭제 될 수 있습니다. '나는 5 가지 방법을 폭발 시도특정 배열로 PHP 문자열 폭발

     Array 
          (
           [tel] => (123) 123-4567 
           [fax] => (234) 127-1234    
           [email] => [email protected] 
          ) 

... 그러나 didn를 :

     Array 
          (
           [0] => tel 
           [1] => (123) 123-4567 
                   fax 
           [2] => (234) 127-1234 
                   email 
           [3] => [email protected] 
          ) 

그러나 필요한 출력 형식은 다음과 같습니다 코드의

       <?php $str = 
           "tel: (123) 123-4567 
           fax : (234) 127-1234 
           email : [email protected]"; 
           $newStr = explode(':', $str); 
           echo '<pre>'; print_r($newStr); 
           ?> 

출력은 일하지 마라. 안내해주십시오.

+0

당신은 구분 기호':'로 폭발하고 있습니다. 그래서'(123) 123-4567'과'fax' 사이에는':'와 같은 구분 기호가 없습니다. 그래서 당신은 둘 다 같은 가치를 얻고 있습니다. –

+0

@PankitKapadia 내가 사용하는 구분 기호는 무엇입니까? 다른 의미있는 구분 기호를 찾지 못했습니다. – user1871640

+1

텍스트의 각 값 사이에 줄 바꿈이 있습니까? 그렇다면 "\ n"을 사용하십시오. – Anton

답변

6
$txt = 
          "tel: (123) 123-4567 
          fax : (234) 127-1234 
          email : [email protected]"; 
$arr = array(); 
$lines = explode("\n",$txt); 
foreach($lines as $line){ 
    $keys = explode(":",$line); 
    $key = trim($keys[0]); 
    $item = trim($keys[1]); 
    $arr[$key] = $item; 
} 
print_r($arr); 

CodePade

+1

Thanks @NullPointer. –

0
foreach($newStr as $key=>$value){ 
     echo $key; 
     echo $value; 
} 
+0

OP가 그냥 에코를하고 싶습니다 (표시)하고 싶지 않습니다 ... check [tpaksu] (http://stackoverflow.com/a/13815039/1723893) –

0
<?php 
    $str = 
    "tel: (123) 123-4567 
    fax : (234) 127-1234 
    email : [email protected]"; 

$contacts = array(); 
$rows = explode("\n", $str); 
foreach($rows as $row) { 
    list($type, $val) = explode(':', $row); 
    $contacts[trim($type)] = trim($val); 
} 
var_export($contacts); 

반환

array (
    'tel' => '(123) 123-4567', 
    'fax' => '(234) 127-1234', 
    'email' => '[email protected]', 
) 
0

분리 문자로 사용 preg_split ":"와 "\ n을"(줄 바꿈 문자) :

$newStr = preg_split("\n|:", $str); 
0
$str = 
    "tel: (123) 123-4567 
    fax : (234) 127-1234 
    email : [email protected]"; 

$array = array(); 
foreach (preg_split('~([\r]?[\n])~', $str) as $row) 
{ 
    $rowItems = explode(':', $row); 
    if (count($rowItems) === 2) 
     $array[trim($rowItems[0])] = trim($rowItems[1]); 
} 

각 시스템마다 줄 바꿈이 다를 수 있으므로 preg_split을 사용해야합니다. 문자열이 유효하지 않으므로 처리해야합니다 (foreach주기의 조건)

2

여기에 regular expressions의 짧은 길이가 있습니다.

preg_match_all('/(\w+)\s*:\s*(.*)/', $str, $matches); 
$newStr = array_combine($matches[1], $matches[2]); 

print_r($newStr); 

결과 :

Array 
(
    [tel] => (123) 123-4567 
    [fax] => (234) 127-1234 
    [email] => [email protected] 
) 

example here이 예는 각 데이터 쌍 "키"를 제공 문자열로하고 별도의 줄에, 그러나, 가정

에 공백이 .