このような複数行の文字列を爆発させたい
color:red
material:metal
このような配列に
$array['color']=red
$array['material']=metal
何か案が?
正規表現を使用できますが、オーバーヘッドがなくても十分に単純です。
$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]);
これを試して
$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
次に、結果の配列の各項目を : で展開し、新しい配列をそのキー/値に設定します。