Преобразование строки в массив key-> value в PHP - PullRequest
1 голос
/ 21 декабря 2010

если у меня есть строка пар ключ-> значение в следующем формате:

MIME-Version: 1.0
From: "Tim Lincecum"
Reply-To: "Tim Lincecum"
Return-path: "Tim Lincecum"
Content-Type: text/html; charset=iso-8859-1
Subject: Giants Win World Series!

Как получить массив такой, что arr['From'] = "Tim Lincecum", etc

Я знаю, что естьexplode(), но единственный разделитель, который я вижу (двоеточие), находится в середине клавиши и значения, а не между каждой парой.Как я могу подойти к этому?

Ответы [ 3 ]

7 голосов
/ 21 декабря 2010

Вы всегда можете использовать регулярное выражение:)

PHP

$str = 'MIME-Version: 1.0' . "\r\n" .
'From: "Tim Lincecum"' . "\r\n" . 
'Reply-To: "Tim Lincecum"' . "\r\n" . 
'Return-path: "Tim Lincecum"' . "\r\n" . 
'Content-Type: text/html; charset=iso-8859-1' . "\r\n" . 
'Subject: Giants Win World Series!';

preg_match_all('/(.*?):\s?(.*?)(\r\n|$)/', $str, $matches);

$headers = array_combine(array_map('trim', $matches[1]), $matches[2]);

var_dump($headers);

Вывод

array(6) {
  ["MIME-Version"]=>
  string(3) "1.0"
  ["From"]=>
  string(14) ""Tim Lincecum""
  ["Reply-To"]=>
  string(14) ""Tim Lincecum""
  ["Return-path"]=>
  string(14) ""Tim Lincecum""
  ["Content-Type"]=>
  string(29) "text/html; charset=iso-8859-1"
  ["Subject"]=>
  string(24) "Giants Win World Series!"
}

См. На IDEone .

3 голосов
/ 21 декабря 2010
$temp = explode("\r\n", $string);
$sets = array();
foreach ($temp as $value) {
    $array = explode(': ', $value);
    $array[1] = trim($array[1], '"');
    $sets[$array[0]] = $array[1];
}

$string - это значение, которое вы получаете из базы данных.

2 голосов
/ 21 декабря 2010

Так как я сделал хорошее предположение в комментариях - я думаю, что мне нужно повторить это здесь как ответ:

Между параметрами есть новая строка, поэтому с

$parameters_pairs = explode("\r\n", $parameters_string);

Вы можете разбить его на пары имя-значение, разделенные двоеточием.

...