如何将值转换为数组PHP
我得到数据字符串lat和长谷歌地图多边形。我想将此值转换为数组如何将值转换为数组PHP,php,arrays,Php,Arrays,我得到数据字符串lat和长谷歌地图多边形。我想将此值转换为数组 $value = "(-6.2811957386588855, 106.70141951079609),(-6.281142416506361, 106.70432702536823),(-6.2781776962328815, 106.70438066954853),(-6.2781776962328815, 106.70136586661579)"; 我希望得到如下数组的结果: $polygon = array(
$value = "(-6.2811957386588855, 106.70141951079609),(-6.281142416506361, 106.70432702536823),(-6.2781776962328815, 106.70438066954853),(-6.2781776962328815, 106.70136586661579)";
我希望得到如下数组的结果:
$polygon = array(
array(-6.2811957386588855, 106.70141951079609),
array(-6.281142416506361, 106.70432702536823),
array(-6.2781776962328815, 106.70438066954853),
array(-6.2781776962328815, 106.70136586661579),
);
您可以将
explode
与trim
和array\u map
$r = explode('),(',trim($value,'()'));
$c = array_map(function($v){return explode(',',$v);}, $r);
print_r($c);
工作示例:您可以通过将括号转换为方括号,并在外部添加一个
[]
层,然后对其进行JSON\u解码,将字符串转换为有效的JSON:
$value = '(-6.2811957386588855, 106.70141951079609),(-6.281142416506361, 106.70432702536823),(-6.2781776962328815, 106.70438066954853),(-6.2781776962328815, 106.70136586661579)';
$polygon = json_decode('[' . str_replace(array('(', ')'), array('[', ']'), $value) . ']', true);
print_r($polygon);
输出:
Array
(
[0] => Array
(
[0] => -6.2811957386589
[1] => 106.7014195108
)
[1] => Array
(
[0] => -6.2811424165064
[1] => 106.70432702537
)
[2] => Array
(
[0] => -6.2781776962329
[1] => 106.70438066955
)
[3] => Array
(
[0] => -6.2781776962329
[1] => 106.70136586662
)
)
您可以像这样使用explode()
函数
$string = '(-6.2811957386588855, 106.70141951079609),(-6.281142416506361, 106.70432702536823),(-6.2781776962328815, 106.70438066954853),(-6.2781776962328815, 106.70136586661579)';
foreach(explode('),(',trim($string,'()')) as $single_array)
{
$sub_array= array();
foreach(explode(',',$single_array) as $sbs_array)
{
$sub_array[] = $sbs_array;
}
$result[] = $sub_array;
}
print_r ($result);
输出:
Array
(
[0] => Array
(
[0] => -6.2811957386588855
[1] => 106.70141951079609
)
[1] => Array
(
[0] => -6.281142416506361
[1] => 106.70432702536823
)
[2] => Array
(
[0] => -6.2781776962328815
[1] => 106.70438066954853
)
[3] => Array
(
[0] => -6.2781776962328815
[1] => 106.70136586661579
)
)
演示:使用,您可以将坐标解析为数组
$value = '(-6.2811957386588855, 106.70141951079609),(-6.281142416506361, 106.70432702536823),(-6.2781776962328815, 106.70438066954853),(-6.2781776962328815, 106.70136586661579)';
preg_match_all('/\(([0-9\-\s,.]+)\)/', $value, $matches);
array_walk($matches[1], function(&$val) { $val = explode(',', $val); });
$coordinates = $matches[1];
print_r($coordinates);
- 使用
preg\u match\u all()
- 使用
array\u walk()
在协调数组上进行迭代,并使用逗号(,
)分隔符
- 工作李>
我建议使用preg\u match\u all和array\u map
$value = '(-6.2811957386588855, 106.70141951079609),(-6.281142416506361, 106.70432702536823),(-6.2781776962328815, 106.70438066954853),(-6.2781776962328815, 106.70136586661579)';
preg_match_all('#\(([\-\d\.]+),\s+([\-\d\.]+)\)#', $value, $matches);
$geo = array_map(function ($a, $b) {
return [(float)$a, (float)$b];
}, $matches[1], $matches[2]);
输出:
array(4) {
[0]=>
array(2) {
[0]=> float(-6.2811957386589)
[1]=> float(106.7014195108)
}
[1]=>
array(2) {
[0]=> float(-6.2811424165064)
[1]=> float(106.70432702537)
}
[2]=>
array(2) {
[0]=> float(-6.2781776962329)
[1]=> float(106.70438066955)
}
[3]=>
array(2) {
[0]=> float(-6.2781776962329)
[1]=> float(106.70136586662)
}
}
这里的$value
是什么?这是字符串还是数组?您最初从何处获取此格式的数据?在提问时,请更具体一点:到目前为止,您在代码示例中尝试了哪些内容?/你期待什么你有什么错误?有关帮助,请查看“如果,可能会发生重复的情况”(
而不是),(
?@MH2K9 json_decode不关心空格:使用正则表达式就像使用机器学习来打招呼一样。@Rakesh Jakhar的答案更简洁、速度更快。这种类比毫无意义。正则表达式旨在从字符串中提取数据,这是一个使用它的完美示例。调用多个函数根本无法解释清楚。我如果其他开发人员看到了该代码,您需要解释为什么要这样写。使用REGEX很简单。我只能同意他的答案可能更快。不过我还没有检查。