Php字符串分解为特定数组

Php字符串分解为特定数组,php,Php,以下是保存联系人信息的字符串。此字符串是动态的,即有时新字段(例如:手机号码)可能会增加,或者旧字段(例如:电话号码)可能会删除 <?php $str = "tel: (123) 123-4567 fax : (234) 127-1234

以下是保存联系人信息的字符串。此字符串是动态的,即有时新字段(例如:手机号码)可能会增加,或者旧字段(例如:电话号码)可能会删除

                              <?php $str = 
                                "tel: (123) 123-4567
                                fax : (234) 127-1234
                                email : abc@a.a";
                                $newStr =  explode(':', $str);
                                echo '<pre>'; print_r($newStr); 
                              ?>
但所需的输出格式如下:

foreach( $newStr as $key=>$value){
      echo $key;
      echo $value;
} 
我试着用五种方式把它炸开。。。但是没有起作用。请导游

$txt = 
                            "tel: (123) 123-4567
                            fax : (234) 127-1234
                            email : abc@a.a";
$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);

将preg\u split与delimeter“:”和“\n”(换行符)一起使用:

您必须使用preg_split,因为每个系统上可能有不同的行尾。还有一种可能是字符串无效,因此您应该处理它(foreach循环中的条件)

这里有一个简短的方法

结果:

数组
(
[电话]=>(123)123-4567
[传真]=>(234)127-1234
[电子邮件]=>abc@a.a
)


但是,本例假设每个数据对都与您提供的字符串一样位于单独的行上,并且“key”不包含空格。

您正在使用分隔符分解
。因此,在
(123)123-4567
传真
之间没有像
这样的分隔符。所以你得到的是同一个值。@PankitKapadia我使用什么分隔符shd?我没有找到任何其他有意义的分隔符。文本中的每组值之间是否有换行符?如果是,请使用“\n”@user1871640-您使用的分隔符不是问题。你可以用任何一种。我只想说,您没有得到单独的值,因为
(123)123-4567
传真
@user1871640之间没有分隔符-请检查投票结果!!OP不想只是呼应(表演)他只想呼应。。。检查
foreach( $newStr as $key=>$value){
      echo $key;
      echo $value;
} 
$txt = 
                            "tel: (123) 123-4567
                            fax : (234) 127-1234
                            email : abc@a.a";
$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);
<?php
    $str = 
    "tel: (123) 123-4567
    fax : (234) 127-1234
    email : abc@a.a";

$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' => 'abc@a.a',
)
$newStr = preg_split("\n|:", $str);
$str =
    "tel: (123) 123-4567
    fax : (234) 127-1234
    email : abc@a.a";

$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_match_all('/(\w+)\s*:\s*(.*)/', $str, $matches);
$newStr = array_combine($matches[1], $matches[2]);

print_r($newStr);