来自字符串的键值数组
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
这可以放入一个可以扩展的函数中,以便正确清理每个项目(而不是此处显示的强力方法),但演示了基础知识。
我有一个键值对字符串,我想将其转换为函数数组。这样我就可以使用它们的键来引用这些值。现在我有这个:
$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
这可以放入一个可以扩展的函数中,以便正确清理每个项目(而不是此处显示的强力方法),但演示了基础知识。