2012-12-11 72 views
0

以下是保存聯繫人信息的字符串。這個字符串是動態的,即有時候是新的字段,例如:手機號碼可能會加起來,或者舊字段說:電話號碼可能會刪除代碼Php字符串爆炸成特定數組

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

輸出是:

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

,但需要輸出的格式如下:

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

我試圖在5月的方式爆炸...但沒」工作。請指導。

+0

你用分隔符':'爆炸。所以'(123)123-4567'和'fax'之間沒有像':'這樣的分隔符。所以你們得到了同樣的價值。 –

+0

@PankitKapadia我使用什麼分隔符shd?我沒有找到任何其他有意義的分隔符。 – 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

謝謝@NullPointer。 –

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

OP不想只回聲(顯示)他只想回聲...檢查[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

但是這個例子假定的是,每個數據對是在一個單獨的線路中提供的字符串中,並且「密鑰」不包含空格。