以下是保存联系信息的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
)
我尝试过以某种方式爆炸......但是没有用。请指导。
答案 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);
答案 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
)
但是,此示例假定每个数据对都在您提供的字符串中的单独行上,并且“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循环中的条件)