2010-08-19 72 views
0

我第一次在這裏發帖並希望有人能夠幫助我。使用帶有preg_replace()的索引數組的問題PHP

我有一個文件衛生組織在610開始編號,並繼續以1019我想用PHP的的preg_match()函數從0開始編號和繼續,直到410

下面是一些代碼,我」一直在努力。但我不能獲得取代數字的功能。我不知道爲什麼,我沒有得到任何錯誤。

<?php 

$string = "610 611 612 613 614 615 616 617"; //this isnt the actual file but will do. The actual file is more complicated. This is just a test string. 

$patterns = array(); 
for ($i=610; $i<1020; $i++) { 
    $patterns[$i] = '/$i/'; 
} 

$replacements = array(); 
for ($j=1; $j<410; $j++) { 
    $replacements[$j] = '\r\n' . $j; 
} 

$newText = preg_replace($patterns, $replacements, $string); 
echo $newText; 

?> 

我用例子#2的形式http://www.php.net/manual/en/function.preg-replace.php作爲參考。

在此先感謝您的幫助:)

+2

你能描述什麼不適合你嗎?輸入,輸出和預期輸出將有助於...... – ircmaxell 2010-08-19 14:23:27

+4

不要在''/ $ i /''和''\ r \ n''上使用單引號。改用雙引號。看到這裏的區別:http://php.net/manual/en/language.types.string.php – NullUserException 2010-08-19 14:24:37

+0

我不知道,但我覺得很奇怪,在這種情況下使用正則表達式。 – BoltClock 2010-08-19 14:24:42

回答

0

這不行嗎?

implode(" ", range(0, 410)) 

看起來很奇怪,你想改變他們「就地」。

+0

毆打它:)準確地說我在想什麼。 – 2010-08-19 14:24:59

+0

你錯過了這個評論:'//這不是真正的文件,但會做。實際的文件比較複雜。這只是一個測試字符串。「# – NullUserException 2010-08-19 14:28:09

+1

@Null不,我讀過它。但它沒有提供任何見解。如果有的話,它可能會使正則表達式的解決方案不太理想,因爲如果接着文本,它可能包含一些數字。 – Artefacto 2010-08-19 14:30:13

0

你的「模式」陣列看起來像這樣:

$patterns (
    610 => '/$i/', 
    611 => '/$i/', 
... 
} 

您需要在7號線使用雙引號:

$patterns[$i] = "/$i/"; 
0

不要用這樣一個簡單的情況下,正則表達式打擾。 ..只需使用str_replace。這將是更快,相當於你現在的代碼...

$patterns = array(); 
for ($i=610; $i<1020; $i++) { 
    $patterns[] = $i; 
} 

$replacements = array(); 
for ($j=1; $j<410; $j++) { 
    $replacements[] = '\r\n' . $j; 
} 

$string = str_replace($patterns, $replacements, $string); 

現在,你仍舊需要使用的preg_replace如果圖案比較複雜(如只搜索該行的開始,等等)...但對於這樣一個簡單的模式,這是不值得的(恕我直言)...

+0

''\ r \ n''不會是換行符。 'str_replace()'也不是真的適合這個(想想單詞邊界) – NullUserException 2010-08-19 14:32:06

+0

我知道這一點。但他說他正在處理文件。所以我認爲他知道這不會是一條新的路線,並且希望在那裏放置一個字面上的\ r \ n ......我不確定這是一個錯誤還是明確的,所以我只是用(s)他提供... – ircmaxell 2010-08-19 14:33:29

+0

是的,這將有助於如果OP提供實際的輸入和預期的輸出文件 – NullUserException 2010-08-19 14:35:17