2017-08-17 115 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