8

我想像这样爆炸一个多行字符串

color:red
material:metal

像这样的数组

$array['color']=red
$array['material']=metal

任何的想法?

4

3 回答 3

16

使用explode(),您可以使用正则表达式,但它很简单,没有开销。

$data = array();
foreach (explode("\n", $dataString) as $cLine) {
    list ($cKey, $cValue) = explode(':', $cLine, 2);
    $data[$cKey] = $cValue;
}

正如评论中提到的,如果数据来自 Windows/DOS 环境,它很可能有 CRLF 换行符,在foreach()解决该问题之前添加以下行。

$dataString = str_replace("\r", "", $dataString); // remove possible \r characters

使用preg_match_all()array_combine()的 regexp 替代方案可以非常愉快:

$matches = array();
preg_match_all('/^(.+?):(.+)$/m', $dataString, $matches);
$data = array_combine($matches[1], $matches[2]);
于 2010-12-02T14:23:57.587 回答
2

试试这个

$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);
于 2013-04-08T10:54:38.603 回答
1

首先在断线时爆炸。普罗利\n

然后在 : 上分解每个结果数组的项目,并为该键/值设置一个新数组。

于 2010-12-02T14:24:00.123 回答