разбить список из двух элементов в массиве как ключ => значение - PullRequest
8 голосов
/ 02 декабря 2010

Я бы хотел разбить многострочную строку вот так

color:red
material:metal

в массив, подобный этому

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

есть идеи?

Ответы [ 3 ]

16 голосов
/ 02 декабря 2010

Используйте 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 () :

$matches = array();
preg_match_all('/^(.+?):(.+)$/m', $dataString, $matches);
$data = array_combine($matches[1], $matches[2]);
2 голосов
/ 08 апреля 2013

Попробуйте это

$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);
1 голос
/ 02 декабря 2010

взорваться первым при разрыве строки.Prolly \ n

Затем разбейте каждый из элементов результирующего массива на: и установите новый массив для этого ключа / значения.

...