Php字符串爆炸成特定的数组

时间:2012-12-11 06:44:55

标签: php

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

                              <?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
                            )

我尝试过以某种方式爆炸......但是没有用。请指导。

6 个答案:

答案 0 :(得分: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);

CodePade

答案 1 :(得分: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] => abc@a.a
)

example here

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

答案 2 :(得分:0)

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

答案 3 :(得分: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',
)

答案 4 :(得分:0)

将preg_split与分隔符“:”和“\ n”(换行符)一起使用:

$newStr = preg_split("\n|:", $str);

答案 5 :(得分: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循环中的条件)