我想從字符串中刪除一些過度的凹痕,在這種情況下它是SQL,因此它可以放入日誌文件中。所以我需要找到最小的縮進量(aka標籤)並將其從每行的前面移除,但是下面的代碼最終會打印出完全相同的任何想法?智能地從字符串中刪除多餘的凹痕
換句話說,我要採取以下(注:StackOverflow上編輯轉換我的選項卡空間,在代碼中,一個標籤模擬4個空格,但它確實是一個\ t字符)
SELECT
blah
FROM
table
WHERE
id=1
並將其轉換爲
SELECT
blah
FROM
table
WHERE
id=1
這裏是我試過的代碼和失敗
$sql = '
SELECT
blah
FROM
table
WHERE
id=1
';
// it's most likely idented SQL, remove any idention
$lines = explode("\n", $sql);
$space_count = array();
foreach ($lines as $line)
{
preg_match('/^(\t+)/', $line, $matches);
$space_count[] = strlen($matches[0]);
}
$min_tab_count = min($space_count);
$place = 0;
foreach ($lines as $line)
{
$lines[$place] = preg_replace('/^\t{'. $min_tab_count .'}/', '', $line);
$place++;
}
$sql = implode("\n", $lines);
print '<pre>'. $sql .'</pre>';
你的SQL字符串中有空格在它的面前,你是不是計算的標籤。 – Nate 2010-05-12 22:38:05
@Nate,實際上是將我的粘貼從標籤轉換爲空格,但它們確實是代碼中的選項卡。 – TravisO 2010-05-12 22:41:55
在開始壓縮縮進之前,您應該在每行開頭處將所有空格轉換爲製表符 – MoreThanChaos 2010-05-12 22:43:44