字符串的键值数组

时间:2015-01-12 19:37:55

标签: php arrays key-value

我有一个键值对字符串,我想将其转换为功能数组。这样我就可以使用他们的密钥来引用这些值。现在我有这个:

$Array = "'Type'=>'Honda', 'Color'=>'Red'";
$MyArray = array($Array);

这不会带回功能键/值数组。我的键值对在变量字符串中,这意味着=>是字符串的一部分,我认为这是我的问题所在。任何帮助,将不胜感激。我想要做的就是将字符串转换为功能键/值对,我可以使用键获取值。我的数据是一个字符串,所以请不要回答“将它们从字符串中删除”。我知道这会奏效:

$MyArray = array('Type'=>'Honda', 'Color'=>'Red');

但我的猜测是数据已经是字符串形式。谢谢你的帮助。

4 个答案:

答案 0 :(得分:3)

没有直接的方法可以做到这一点。因此,您需要编写自定义函数来构建每个元素的键和值。

自定义函数的示例规范:

  • 使用explode()根据逗号分割每个元素。
  • 迭代结果并:
    • explode() =>
    • 删除不必要的字符,即单引号
    • 将第一个元素存储为键,将第二个元素存储为值
  • 返回阵列。

注意:如果您的字符串包含分隔符,那么这将更具挑战性。

答案 1 :(得分:1)

正如你所说,你确实需要“将它们从字符串中取出”。但您不必手动完成。另一个答案用爆炸;这是一个很好的方法。我会告诉你另一个 - 我认为最简单的方法是使用preg_match_all()documentation),如下所示:

$string = "'Type'=>'Honda', 'Color'=>'Red'";
$array = array();
preg_match_all("/'(.+?)'=>'(.+?)'/", $string, $matches);
foreach ($matches[1] as $i => $key) {
    $array[$key] = $matches[2][$i];
}
var_dump($array);

答案 2 :(得分:0)

您需要解析字符串并提取数据:

$string = "'Type'=>'Honda', 'Color'=>'Red'";

$elements = explode(",",$string);

$keyValuePairs = array();
foreach($elements as $element){
$keyValuePairs[] = explode("=>",$element);
}

var_dump($keyValuePairs);

现在,您可以使用$ keyValuePairs数组创建on数组。

答案 3 :(得分:0)

以下是example的一种方法 -

$Array = "'Type'=>'Honda', 'Color'=>'Red'";
$realArray = explode(',',$Array); // get the items that will be in the new array
$newArray = array();
foreach($realArray as $value) {
    $arrayBit = explode('=>', $value); // split each item
    $key = str_replace('\'', '', $arrayBit[0]); // clean up
    $newValue = str_replace('\'', '', $arrayBit[1]); // clean up
    $newArray[$key] = $newValue; // place the new item in the new array
}
print_r($newArray); // just to see the new array
echo $newArray['Type']; // calls out one element

这可以放入一个可以扩展的功能中,这样每个项目都可以正确清理(而不是这里显示的强力方法),但是演示了基础知识。