2011-02-07 3 views
16

У меня есть строка, как это:PHP - разбить строку в пар ключ/значение

ключ = значение, key2 = значение2

, и я хотел бы разобрать его на что-то вроде этого:

array(
    "key" => "value", 
    "key2" => "value2" 
) 

я мог бы сделать что-то вроде

$parts = explode(",", $string) 
$parts = array_map("trim", $parts); 
foreach($parts as $currentPart) 
{ 
    list($key, $value) = explode("=", $currentPart); 
    $keyValues[$key] = $value; 
} 

Но это кажется смешным. Должен быть какой-то способ сделать это умнее с PHP правильно?

+0

Откуда берутся ваши данные? Вы контролируете, как он хранится? Предполагается ли он, что он является читаемым человеком (и записываемым) форматом? –

ответ

18

Если вы не возражаете, используя регулярное выражение ...

$str = "key=value, key2=value2"; 
preg_match_all("/([^,= ]+)=([^,= ]+)/", $str, $r); 
$result = array_combine($r[1], $r[2]); 
var_dump($result); 
+0

Вы избили меня на этом – JPelletier

+0

, однако ... использование взрыва и цикла, как в примере OP, более чем вероятно окажется более эффективным, чем использование regex для его анализа. –

+1

Вы никогда не знаете, что прежде, чем вы проверите это. Это сильно зависит от шаблона использования. – etarion

11

если вы меняете строку использовать & вместо , в качестве разделителя, вы можете использовать parse_str()

+2

'parse_str' также URL-декодирует. – aaz

2

Если вы можете изменить формат строки, чтобы соответствовать строке запроса URL-адреса (с использованием & вместо ,, помимо прочего, вы можете использовать parse_str. Обязательно используйте параметр двух параметров.

Смежные вопросы