来自字符串的键值数组

Key Value Array From String

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

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

这不会带回功能性 key/value 数组。我的键值对在一个可变字符串中,这意味着 => 是字符串的一部分,我认为这就是我的问题所在。任何帮助,将不胜感激。我想要做的就是将字符串转换为函数 key/value 对,我可以在其中使用键获取值。我的数据是一个字符串,所以请不要回复 "take them out of the string." 我知道这会起作用:

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

但我的问题是数据已经是字符串形式。感谢您的帮助。

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

自定义函数的规范示例:

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

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

如您所说,您确实需要 "take them out of the string"。但您不必手动执行。另一个答案使用爆炸;这是一个很好的方法。我将向您展示另一个 - 我认为最简单的方法是使用 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);

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

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

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

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

var_dump($keyValuePairs);

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

这里是 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

这可以放入一个可以扩展的函数中,以便正确清理每个项目(而不是此处显示的强力方法),但演示了基础知识。