2017-08-17 76 views
0

嗨,我有以下字符串PHP字符串以逗號來的foreach添加

$phones = "Samsung Galaxy S8~LG G6~iPhone 7 Plus~ Motorola Z2"; 

我用字符串分隔爆炸

$myArray = explode('~', $phones); 

,並在foreach循環使用它

foreach($myArray as $value) { 

     echo '<li>'.$value.'</li>'; 

} 

的結果是:

  • 三星Galaxy S8
  • LG G6
  • iPhone 7加
  • 摩托羅拉Z2

但我想要做的是逗號添加到每個元素除了最後一個,並加上括號數字。

  • 三星Galaxy S(8),
  • LG G(6),
  • iPhone(7)另外,
  • 摩托羅拉Z(2)

我試圖破滅但是不與foreach循環工作

感謝

回答

3

如果您對完整字符串執行preg_replace,則只需進行一次正則表達式調用。
然後,而不是explode和implode我使用str_replace添加li標籤。

$phones = "Samsung Galaxy S8~LG G6~iPhone 7 Plus~ Motorola Z2"; 

$value = preg_replace('/(\d+.*?)(~)/', '($1)$2', $phones . "~"); 

$value = "<li>". str_replace("~", ",</li><li>", substr($value,0,-1)) . "</li>"; 

Echo $value; 

https://3v4l.org/sCkjg

編輯我看到了iPhone 7加事情的願望。
我想我管理。
我只是在正則表達式的字符串末尾添加一個~來捕獲。
我正則表達式(數字 - >)(〜)。這意味着我可以在正則表達式替換中使用$ 1和$ 2。
然後爲了確保我不把~保留在結束字符串中,我需要在str_replace中刪除它。

+1

是的,認爲比我更長:-) – AbraCadaver

+0

謝謝男人!它工作完美。例如,如果我想用「圖標img」替換「Samsung Galaxy S8」中的特定單詞「Galaxy」,我應該怎麼辦? – PerfectGohan

+1

'$ phones = str_replace(「Galaxy」,「」,$ phones);'介於第一行和第二行代碼之間。 (在正則表達式之前)。不過實話說。你不能像這樣繼續添加你的問題。 – Andreas

1

拳頭找到最後一個數組埃爾通過使用最終功能來實現。在循環中,如果元素最後只顯示逗號。

$phones = "Samsung Galaxy S8~LG G6~iPhone 7 Plus~ Motorola Z2"; 
$myArray = explode('~', $phones); 

$lastElement = end($myArray); 
foreach($myArray as $value) { 
    $value = preg_replace('/\d+/', '($0)', $value); 
    if($value == $lastElement) { 
     echo '<li>'.$value.'</li>'; 
    }else{ 
     echo '<li>'.$value.',</li>'; 
    } 

} 
+0

我錯過了添加括號,會更新答案。 –

+0

將打印最後一個元素兩次? –

+0

@PetervanderWal更新了答案。 –

5

你可能會需要正則表達式來添加()各地的數字:

$myArray = explode('~', $phones); 

foreach($myArray as &$value) { 
    $value = preg_replace('/\d+/', '($0)', $value); 
} 
echo '<li>' . implode(',</li><li>', $myArray) . '</li>'; 
  • 更換數字\d+任何序列與(匹配的數字)
  • 破滅使用逗號和列表項目標記
+0

你是一個傳奇,謝謝!如果我想在例如「iPhone(7 Plus)」中加入「iPhone(7)Plus」,我應該改變什麼? – PerfectGohan

+0

''/ \ d + [^ \ w] + /''可能會這樣做。數字,然後空格,然後不是空格。 – AbraCadaver

+0

謝謝,但它擺脫括號 – PerfectGohan