将值从变量保存到数组

时间:2019-02-21 10:44:54

标签: php arrays regex string latitude-longitude

我有一个包含坐标的长字符串变量 我想根据纬度和经度将每个坐标保留在数组的单独单元格中。 例如。以下字符串:

string = "(33.110029967689556, 35.60865999564635), (33.093492845160036, 35.63955904349791), (33.0916232355565, 35.602995170206896)";

我想要这个:

arrayX[0] = "33.110029967689556";
arrayX[1] = "33.093492845160036";
arrayX[2] = "33.0916232355565";
arrayY[0] = "35.60865999564635";
arrayY[1] = "35.63955904349791";
arrayY[2] = "35.602995170206896";

有人有想法吗?

谢谢

4 个答案:

答案 0 :(得分:1)

我的建议,这里的工作示例:https://3v4l.org/W99Uu

export class Stomp {

public static brokerURL = null;
public static heartbeatIncoming: 0; // Typical value 0 - disabled
public static heartbeatOutgoing: 0; // Typical value 20000 - every 20 seconds
public static reconnectDelay: 5000;

constructor(private appConfig: AppConfig) {
  Stomp.brokerURL = this.appConfig.getConfig('openbatonWS') + '/websocketRD/websocket';

答案 1 :(得分:1)

使用substr修改子字符串,它使您只需编写少量代码即可。

$array_temp = explode('),', $string);

$arrayX = [];
$arrayY = [];

foreach($array_temp as $at)
{
  $at = substr($at, 1);
  list($arrayX[], $arrayY[]) = explode(',', $at);

}

print_r($arrayX);
print_r($arrayY);

答案 2 :(得分:1)

最简单的方法可能是使用regex来匹配每个元组:

  • 每个数字都是数字和.的组合:正则表达式[\d\.]+与其匹配;
  • 每个坐标具有以下格式:(,数字,,,空格,数字)。正则表达式为\([\d\.]+,\s*[\d\.]+\)
  • 然后您可以使用括号\(([\d\.]+),\s*([\d\.]+)\)捕获每个数字。这将产生捕获组:第一个将包含X坐标,第二个将包含Y。

此正则表达式可与方法preg_match_all一起使用。

<?php

$string = '(33.110029967689556, 35.60865999564635), (33.093492845160036, 35.63955904349791), (33.0916232355565, 35.602995170206896)';

preg_match_all('/\(([\d\.]+)\s*,\s*([\d\.]+)\)/', $string, $matches);

$arrayX = $matches['1'];
$arrayY = $matches['2'];

var_dump($arrayX);
var_dump($arrayY);

有关实时示例,请参见http://sandbox.onlinephpfunctions.com/code/082e8454486dc568a6557058fef68d6f10c8dbd0

答案 3 :(得分:0)

您首先需要将字符串拆分为一个数组。然后,您清除值仅获得数字。最后,您将新值放入新数组中。

<?php
$string = "(33.110029967689556, 35.60865999564635), (33.093492845160036, 35.63955904349791), (33.0916232355565, 35.602995170206896)";
$loca = explode(", ", $string);

$arr_x = array();
$arr_y = array();

$i = 1;
foreach($loca as $index => $value){
    $i++;
    if ($i % 2 == 0) {
      $arr_x[] = preg_replace('/[^0-9.]/', '', $value);
    }else{
        $arr_y[] = preg_replace('/[^0-9.]/', '', $value);
    }
}

print_r($arr_x);
print_r($arr_y);

您可以在这里进行测试: http://sandbox.onlinephpfunctions.com/code/4bf04e7aabeba15ecfa114d8951eb771610a43a4