Php中的多个分隔符处于爆炸状态

我有一个问题,我有一个string数组,我想爆炸在不同的分隔符。 例如

$example = 'Appel @ Ratte'; $example2 = 'apple vs ratte' 

我需要一个数组,它爆炸在@或vs.

我已经写了一个解决scheme,但是如果大家有更好的解决scheme,请在这里发帖。

 private function multiExplode($delimiters,$string) { $ary = explode($delimiters[0],$string); array_shift($delimiters); if($delimiters != NULL) { if(count($ary) <2) $ary = $this->multiExplode($delimiters, $string); } return $ary; } 

怎么样使用

 $ output = preg_split(“/(@ | vs)/”,$ input);

你可以取第一个string,用str_replace代替所有的@ ,然后在vs爆炸,反之亦然。

 function multiexplode ($delimiters,$string) { $ready = str_replace($delimiters, $delimiters[0], $string); $launch = explode($delimiters[0], $ready); return $launch; } $text = "here is a sample: this text, and this will be exploded. this also | this one too :)"; $exploded = multiexplode(array(",",".","|",":"),$text); print_r($exploded); //And output will be like this: // Array // ( // [0] => here is a sample // [1] => this text // [2] => and this will be exploded // [3] => this also // [4] => this one too // [5] => ) // ) 

来源: php @ metehanarslan在php.net

不会strtok()为你工作?

如何使用strtr()replace所有其他分隔符与第一个?

 private function multiExplode($delimiters,$string) { return explode($delimiters[0],strtr($string,array_combine(array_slice($delimiters,1),array_fill(0,count($delimiters)-1,array_shift($delimiters)))))); } 

我想,这是不可读的,但我testing了它在这里工作。

一线的ftw!

只要你可以使用下面的代码:

 $arr=explode('sep1',str_replace(array('sep2','sep3','sep4'),'sep1',$mystring)); 

你会遇到一些问题(如果你有这个string:例如“vs @ apples”),但是如果我们开始说明你已经考虑到了这个问题并且已经修复了所有可能的冲突,你可以用$delimiter[0]replace$delimiter[1]$delimiter[n] $delimiter[0] ,然后在第一个上分割?

如果您的分隔符只是字符,您可以使用strtok ,这似乎更适合在这里。 请注意,您必须使用它与一个while循环来达到效果。

我这样做…

 public static function multiExplode($delims, $string, $special = '

') { if (is_array($delims) == false) { $delims = array($delims); } if (empty($delims) == false) { foreach ($delims as $d) { $string = str_replace($d, $special, $string); } } return explode($special, $string); }

这将工作:

 $stringToSplit = 'This is my String!' ."\n\r". 'Second Line'; $split = explode ( ' ', implode ( ' ', explode ( "\n\r", $stringToSplit ) ) ); 

正如你所看到的那样,它首先将一个爆炸的零件和一个空间粘合在一起,然后再把它们分开,这次把它和空间隔开了。

你可以尝试这个解决scheme….它很好

 function explodeX( $delimiters, $string ) { return explode( chr( 1 ), str_replace( $delimiters, chr( 1 ), $string ) ); } $list = 'Thing 1&Thing 2,Thing 3|Thing 4'; $exploded = explodeX( array('&', ',', '|' ), $list ); echo '<pre>'; print_r($exploded); echo '</pre>'; 

参考: http : //www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/