【问题标题】:Converting a string into a key->value array in PHP在 PHP 中将字符串转换为 key->value 数组
【发布时间】:2010-12-21 00:33:44
【问题描述】:

如果我有一串键值对,格式如下:

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",

我知道有 explode() 函数,但我看到的唯一分隔符(冒号)是在键和值的中间,而不是在每对之间。我该如何处理?

【问题讨论】:

  • 你从哪里得到这个?为什么标题不用换行符分隔?
  • 这是它们当前在我们数据库中的存储方式。
  • 你确定参数之间没有换行符吗?
  • 你说得对,我觉得自己很蠢 :( 谢谢
  • 参数之间是否有换行符?

标签: php arrays string explode


【解决方案1】:

你总是可以使用正则表达式:)

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!"
}

See it on IDEone.

【讨论】:

  • @Jonah Bron 我想您指的是仅使用 \n 作为换行符分隔符(我忘记了规范)。我已经更新了答案。感谢您的提醒。
  • @alex:我指的是它不是 OP 要求的键 => 值形式的事实。但是你修好了。
  • @alex:我认为你必须在正则表达式中使用\z,而不是$。我想我试过一次......
  • @Jonah Bron 也许,但它在我的示例中有效。让我有一个谷歌:)
【解决方案2】:
$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 是您从数据库中获取的值。

【讨论】:

  • 我在问如何做字符串 -> 数组。
  • 哦,你想反过来。它们是否由新行分隔?
【解决方案3】:

因为我在 cmets 中做了一个很好的猜测 - 我想我需要在这里重复它作为答案:

参数之间有换行符,所以用

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

您可以将其拆分为名称-值对,用冒号分隔。

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 2014-04-23
    • 2016-12-14
    • 2014-06-07
    • 2020-07-21
    • 2016-04-17
    • 2014-02-05
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多