根据数组中的值拆分字符串

时间:2009-05-21 02:47:35

标签: php string

我有一组字符串,我需要将其组合成一个数组。 字符串需要分为'/',',','with'或'&'。 不幸的是,字符串可能包含需要拆分的两个字符串,因此我不能使用拆分或爆炸。

例如,一个字符串可以说'首先过去/超越&然后转',所以我试图得到一个将返回的数组 数组('先过去','超越','然后转')

我目前使用的代码是

$splittersArray=array('/', ',', ' with ','&');
    foreach($splittersArray as $splitter){
if(strpos($string, $splitter)){
    $splitString = split($splitter, $string);
    foreach($splitString as $split){

我似乎无法在PHP中找到允许我这样做的函数。 我是否需要将字符串传回漏斗的顶部,并在字符串一次又一次地拆分后继续通过'foreach'?

这看起来效率不高。 任何建议都会很棒。 谢谢, 皮特

2 个答案:

答案 0 :(得分:8)

使用正则表达式和preg_split

在你提到的情况下,你会得到分裂数组:

$splitString = preg_split('/(\/|\,| with |\&/)/', $string);

答案 1 :(得分:0)

要简洁地编写模式,请为单字符分隔符使用字符类,并在管道之后添加 with 分隔符作为值(正则表达式中的“或”字符)。在分隔符组的任一侧允许零个或多个空格,以便不需要修剪输出中的值。

我正在使用 PREG_SPLIT_NO_EMPTY 函数标志,以防在字符串的开头或结尾出现分隔符并且您不希望生成任何空元素。

代码:(Demo)

$string = 'first past/ going beyond & then turn with everyone';

var_export(
    preg_split('~ ?([/,&]|with) ?~', $string, null, PREG_SPLIT_NO_EMPTY)
);

输出:

array (
  0 => 'first past',
  1 => 'going beyond',
  2 => 'then turn',
  3 => 'everyone',
)