【问题标题】:PHP: remove last comma of a multipolygonPHP:删除多面体的最后一个逗号
【发布时间】:2015-07-03 11:54:25
【问题描述】:

我有以下问题: 我将 WKT 从 DB 动态导入到 WKT Wicket Javascript 库中。我必须做一些替换以正确适应 WKT。由于 mysql 获取 WKT AsText(SHAPE) 我接收了几个数组,例如POLYGON((xxxx))、POLYGON((yyyy)) 等等。 首先,我必须删除所有“POLYGON”

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

并在<?php之前添加MULTIPOLYGON

在检票口中标记。有用。 其次,我必须在多边形之间添加逗号,准确地说是在 "))((" 括号之间:

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

它有效,但最后一个逗号仍然是“轻微”变形我的多面体: MULTIPOLYGON((xxx)),((yyy)),((zzz)),

如何删除最后一个逗号?

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

【问题讨论】:

  • str_replace()。使用那个
  • 在你使用str_replace之后使用$str2 = rtrim($str2, ","),看here
  • 我试过 preg_replace、rtrim、各种正则表达式。它总是删除所有逗号。
  • 请看here

标签: php regex polygons wkt


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    谢谢你们 - 你的回答是正确的,非常有帮助。

    问题不是字符串替换。更多的是从数据库中获取的数据。 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多