Php 字符串中的键值数组
我有一个键值对字符串,我想将其转换为函数数组。这样我就可以使用它们的键引用这些值。现在我有这个:Php 字符串中的键值数组,php,arrays,key-value,Php,Arrays,Key Value,我有一个键值对字符串,我想将其转换为函数数组。这样我就可以使用它们的键引用这些值。现在我有这个: $Array = "'Type'=>'Honda', 'Color'=>'Red'"; $MyArray = array($Array); 这不是带回一个功能键/值数组。我的键值对在一个变量字符串中,这意味着=>是字符串的一部分,我想这就是我的问题所在。任何帮助都将不胜感激。我所要做的就是将字符串转换成函数键/值对,在这里我可以使用键获取值。我的数据是一个字符串,因此请不要回答“从字符
$Array = "'Type'=>'Honda', 'Color'=>'Red'";
$MyArray = array($Array);
这不是带回一个功能键/值数组。我的键值对在一个变量字符串中,这意味着=>是字符串的一部分,我想这就是我的问题所在。任何帮助都将不胜感激。我所要做的就是将字符串转换成函数键/值对,在这里我可以使用键获取值。我的数据是一个字符串,因此请不要回答“从字符串中删除它们”。我知道这将起作用:
$MyArray = array('Type'=>'Honda', 'Color'=>'Red');
但我的问题是数据已经是字符串的形式了。谢谢您的帮助。没有直接的方法可以做到这一点。因此,您需要编写一个自定义函数来为每个元素构建键和值 自定义函数的示例规范:
- 用于根据逗号拆分每个元素
- 迭代结果并:
打开explode()
=>
- 删除不必要的字符,即单引号
- 将第一个元素存储为键,将第二个元素存储为值
- 返回数组
注意:如果字符串包含分隔符,这将更具挑战性。没有直接的方法可以做到这一点。因此,您需要编写一个自定义函数来为每个元素构建键和值 自定义函数的示例规范:
- 用于根据逗号拆分每个元素
- 迭代结果并:
打开explode()
=>
- 删除不必要的字符,即单引号
- 将第一个元素存储为键,将第二个元素存储为值
- 返回数组
preg_match_all()
(),如下所示:
$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);
正如你所说,你确实需要“把它们从绳子上拿出来”。但你不必手动操作。另一个答案是使用爆炸;这是一个很好的方法。我将向您展示另一个-我认为最简单的方法是使用preg_match_all()
(),如下所示:
$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数组。您需要解析字符串并提取数据:
$string = "'Type'=>'Honda', 'Color'=>'Red'";
$elements = explode(",",$string);
$keyValuePairs = array();
foreach($elements as $element){
$keyValuePairs[] = explode("=>",$element);
}
var_dump($keyValuePairs);
现在,您可以使用$keyValuePairs数组创建您的on数组。这里是一种方法,您可以这样做-
$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'";
$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
这可以放在一个可以扩展的函数中,以便正确地清理每个项(而不是此处显示的暴力方法),但演示了基本原理。+如果键和值不包含分隔符,这将起作用。是的,这一点很好。我假设答案中的数据格式良好。+如果键和值不包含分隔符,这将起作用。是的,这一点很好。我假设答案中的数据格式正确,要删除单引号,可以使用$cleanString=str_replace(“'”,“,$searchString);要删除单引号,可以使用$cleanString=str_replace(“'”,“,$searchString);