0

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

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

代码的输出是:

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

但所需的输出格式如下:

                        Array
                            (
                                [tel] => (123) 123-4567
                                [fax] =>  (234) 127-1234            
                                [email] =>  abc@a.a
                            )

我尝试以多种方式爆炸它......但没有奏效。请指导。

4

6 回答 6

6
$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);

密码键盘

于 2012-12-11T06:48:37.800 回答
2

这是使用正则表达式的更短的方法。

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] => abc@a.a
)

这里的例子

但是,此示例假定每个数据对位于您提供的字符串中的单独行上,并且“键”不包含空格。

于 2012-12-11T07:01:41.973 回答
0

使用带有分隔符“:”和“\n”(换行符)的 preg_split:

$newStr = preg_split("\n|:", $str);
于 2012-12-11T06:53:23.397 回答
0
foreach( $newStr as $key=>$value){
      echo $key;
      echo $value;
} 
于 2012-12-11T06:47:56.607 回答
0
<?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',
)
于 2012-12-11T06:50:36.677 回答
0
$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_split 因为每个系统上可能有不同的行尾。字符串也有可能无效,因此您应该处理它(foreach 循环中的条件)

于 2012-12-11T07:00:36.890 回答