【发布时间】:2011-05-19 04:03:39
【问题描述】:
我想像这样分解一个多行字符串
color:red
material:metal
到这样的数组
$array['color']=red
$array['material']=metal
有什么想法吗?
【问题讨论】:
我想像这样分解一个多行字符串
color:red
material:metal
到这样的数组
$array['color']=red
$array['material']=metal
有什么想法吗?
【问题讨论】:
使用explode(),您可以使用正则表达式,但它很简单,没有开销。
$data = array();
foreach (explode("\n", $dataString) as $cLine) {
list ($cKey, $cValue) = explode(':', $cLine, 2);
$data[$cKey] = $cValue;
}
如 cmets 中所述,如果数据来自 Windows/DOS 环境,它很可能有 CRLF 换行符,在 foreach() 之前添加以下行将解决该问题。
$dataString = str_replace("\r", "", $dataString); // remove possible \r characters
使用preg_match_all() 和array_combine() 的正则表达式的替代方案非常令人愉快:
$matches = array();
preg_match_all('/^(.+?):(.+)$/m', $dataString, $matches);
$data = array_combine($matches[1], $matches[2]);
【讨论】:
$cValue 中去掉可能的"\r"。
试试这个
$value = '1|a,2|b,3|c,4|d';
$temp = explode (',',$value);
foreach ($temp as $pair)
{
list ($k,$v) = explode ('|',$pair);
$pairs[$k] = $v;
}
print_r($pairs);
【讨论】:
在换行时首先爆炸。普罗利\n
然后在 : 上分解每个结果数组的项,并为该键/值设置一个新数组。
【讨论】: