PHP:删除多边形的最后一个逗号

时间:2015-07-03 11:54:25

标签: php regex polygons wkt

我有以下问题: 我将WKT dynamicaly从DB导入到WKT Wicket Javascript库中。我必须做一些替换才能正确适应WKT。由于mysql获取WKT AsText(SHAPE),因此我会重复使用几个数组,例如POLYGON((xxxx)),POLYGON((yyyy))等。 首先,我必须删除所有“POLYGON”做

$str = preg_replace('/^POLYGON/', '', $WKT[1]);  

并在<?php

之前添加MULTIPOLYGON wicket中的

标签。有用。 其次,我必须在多边形之间添加逗号,在“)之间预先添加逗号”((“括号:

$str2 = str_replace(array('((', '))'), array('((', ')),'), $str);    

它有效,但最后一个逗号仍然是“略微”变形我的多边形: MULTIPOLYGON((XXX)),((YYY)),((ZZZ)),

如何删除最后一个逗号?

我会感谢每一个可以解决我问题的正则表达式或其他解决方案。

2 个答案:

答案 0 :(得分:1)

在任何字符串中,如果您确定不跟随X,则可以删除最后一个X.因此,您可以使用否定前瞻:(,)(?!.*,),如here所示,并将其替换为空字符串。

$result = preg_replace('/(,)(?!.*,)/', '', $str)

这并没有查看上下文,它只会删除任何字符串的最后一个逗号,无论它在哪里。

答案 1 :(得分:-1)

谢谢你们两位 - 你的答案是对的,非常有帮助。

问题不在于字符串替换。这是从DB获取的更多数据。 Mysqli_fetch_array和mysqli_fetch_assoc返回3个获取行的stringstringsring或arrayarrayarray。这就是所有逗号都被替换的原因。

我改为mysqli_fetch_all,然后为每一行(作为数组)进行了少量替换,并将每个替换为变量。在我将它们合并为单个变量之后,我可以应用您的解决方案。它不是一种软化的解决方案,但如果它被打包到功能中它就会没问题。

($WKT = mysqli_fetch_all($result)) {
$str = preg_replace('/POLYGON/', '', $WKT[0]);
$str1 = preg_replace('/POLYGON/', '', $WKT[1]);
$str2 = preg_replace('/POLYGON/', '', $WKT[2]);
$str3 = implode($str);
$str4 = implode($str1);
$str5 = implode($str2);
$str6 = $str3 . $str4 . $str5;
$str7 = preg_replace('/\)\)/', ')),', $str6);
$str8 = rtrim($str7, ",");
echo $str8;
}