PHP将坐标转换为数组数组并返回变量

时间:2014-02-24 23:19:12

标签: php arrays variables coordinates

我需要将一些kml坐标(x,y,z)转换为(x,y)数组以与php函数一起使用,然后返回到变量以与google地图一起使用。

$pontos = "224,250,0 244,232,0 231,262,0 248,229,0 224,250,0";

需要转变为:

$pontos = array(
    array('x'=>224,'y'=>250),
    array('x'=>244,'y'=>232),
    array('x'=>231,'y'=>262),
    array('x'=>248,'y'=>229),
    array('x'=>224,'y'=>250)
);

它将与某个功能一起使用:

simplify($pontos);

此函数将返回一个简化的点数组,如下所示:

Array ( 
[0] => Array ( [x] => 224 [y] => 250 ) 
[1] => Array ( [x] => 231 [y] => 262 ) 
[2] => Array ( [x] => 224 [y] => 250 ) 
)

这个数组需要转换回变量,如下所示:

$pontos = "224,250,0 231,262,0 224,250,0";

有人能指出我如何实现这一目标的方向吗? 非常感谢:)

2 个答案:

答案 0 :(得分:2)

这两次转化都是使用array_map()的具体工具:

$pontos = "224,250,0 244,232,0 231,262,0 248,229,0 224,250,0";

// convert to
$xy = array_map(function($item) {
    return ['x' => strtok($item, ','), 'y' => strtok(',')];
}, explode(' ', $pontos));

// convert back
$pontos = join(' ', array_map(function($item) {
    return sprintf('%d,%d,0', $item['x'], $item['y']);
}, $xy));

答案 1 :(得分:1)

这就是你要做的事情:

//To convert it into a 2D array    
$pontos = explode(" ",$pontos);
for($i=0;$i<count($pontos);$i++){
     $temp = array_splice(explode(",",$pontos[$i]),2);
     $pontos[$i]['x'] = $temp[0];
     $pontos[$i]['y'] = $temp[1];
}

无法将其转换回来,因为“z”坐标已被删除,因此您需要在转换之前将字符串预先存储在另一个变量中。

$old = $pontos;
//do converting stuff
//.....
//convert back by doing:
$pontos = $old

但是,假设z始终为0,那么可以将其反转为:

for($j=0;$j<count($pontos);$j++){
     $pontos[$j] = implode(",",$pontos[$j]);
     $pontos[$j] .= ",0"
}
$pontos = implode(" ",$pontos);

注意:我没有运行此代码,因此可能有一些错误(可能不会)。如果它不起作用,请评论,我会相应地更新答案。