Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将值转换为数组PHP_Php_Arrays - Fatal编程技术网

如何将值转换为数组PHP

如何将值转换为数组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(

我得到数据字符串lat和长谷歌地图多边形。我想将此值转换为数组

$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很简单。我只能同意他的答案可能更快。不过我还没有检查。