2015-07-03 144 views
0

我有以下問題: 我從WKT Wicket Javascript庫導入WKT dynamicaly。我必須做一些替代以正確適應WKT。由於mysql獲取WKT AsText(SHAPE),我收到了幾個數組,例如POLYGON((xxxx)),POLYGON((yyyy))等。 首先,我不得不刪除所有的 「多邊形」 做PHP:刪除多面體的最後一個逗號

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

和之前的檢票口<?php

標籤添加MULTIPOLYGON。有用。 第二,我必須添加逗號多邊形之間,preicisely之間 「()()」 括號:

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

它的工作原理,但最後一個逗號仍然是什麼 「稍微」 變形我的多面: MULTIPOLYGON((XXX)),( (YYY)),((ZZZ)),

如何刪除最後一個逗號?

我會很感謝每一個正則表達式或一些其他的解決方案,它可以解決我的問題。

+0

'str_replace()'。使用 –

+2

在執行'str_replace'後,使用'$ str2 = rtrim($ str2,「,」)',Look [here](http://php.net/rtrim)。 – DavidDomain

+0

我嘗試了preg_replace,rtrim,各種正則表達式。它總是刪除所有的逗號。 – Miroslav

回答

1

在任何字符串,如果你是s,你可以刪除最後一個X.沒有X跟隨。因此,您可以使用負面預測:(,)(?!.*,),如here所示,並將其替換爲空字符串。

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

這並不在上下文看,雖然,它只會刪除任何字符串的最後一個逗號,無論它在哪裏。

-1

謝謝你們兩位 - 你的回答是對的,非常有幫助。

問題不在於字符串替換。這是從數據庫獲取的數據更多。 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; 
}