Я хотел бы, чтобы взорвать многострочную-нить вроде этоговзрывается два-элемента-список в массиве как ключ => значение
color:red
material:metal
в массив, как это
$array['color']=red
$array['material']=metal
любые идея?
Я хотел бы, чтобы взорвать многострочную-нить вроде этоговзрывается два-элемента-список в массиве как ключ => значение
color:red
material:metal
в массив, как это
$array['color']=red
$array['material']=metal
любые идея?
Используйте explode(), вы можете использовать regexp для этого, но это достаточно просто без накладных расходов.
$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():
$matches = array();
preg_match_all('/^(.+?):(.+)$/m', $dataString, $matches);
$data = array_combine($matches[1], $matches[2]);
Не забудьте, по крайней мере, исключить возможный `` \ r "` из `$ cValue`. – Jon 2010-12-02 14:32:25
взорваться первой на линии разрыва. Prolly \ n
Затем взорвите каждый из результирующих элементов массива на: и установите новый массив на этот ключ/значение.
Попробуйте
$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);
У вас есть? – SilentGhost 2010-12-02 14:22:07