Я хотел бы взорвать многострочную строку, подобную этой
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]);
Попробуй это
$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);
сначала взорваться на разрыве линии. Prolly \ n
Затем взорвите каждый из результирующих элементов массива на: и установите новый массив на этот ключ / значение.