爆炸中的 Php 多重分界线

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

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

我需要一个在@或 vs 中爆炸的数组。

我已经写了一个解决方案,但如果大家有更好的解决方案,请在这里张贴。

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;
}
195455 次浏览

尝试使用:

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

strtok()不适合你吗?

你会遇到一些问题(例如,如果你有这个字符串: “ vs@apple”) ,使用这种分离方法,但是如果我们开始声明你已经考虑到这一点,并且已经修复了所有可能的冲突,你可以只用 $delimiter[0]代替所有 $delimiter[1]$delimiter[n]的事件,然后在第一个事件上分离?

您可以采取第一个字符串,取代所有的 @vs使用 str_replace,然后爆炸的 vs或反之亦然。

如果您的分隔符只是字符,那么您可以使用 strtok,它似乎更适合这里。注意,您必须将它与 while循环一起使用才能达到效果。

使用 strtr()将所有其他分隔符替换为第一个分隔符如何?

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)
)
)
)
);
}

我猜有点看不懂,但我在这里测试过。

俏皮话!

你可以简单地使用以下代码:

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

我这样做..。

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
)
)
);

正如你所看到的,它首先用一个空格把爆炸后的部分粘在一起,然后再把它分开,这次把空格带走。

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] => )
// )

资料来源: @ metehanarslan at php.net

你可以试试这个方法,效果很好。

它将所有分隔符替换为一个公共分隔符“ chr (1)”,然后使用 把绳子炸断。

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/

这个怎么样?

/**
* Like explode with multiple delimiters.
* Default delimiters are: \ | / and ,
*
* @param string $string String that thould be converted to an array.
* @param mixed $delimiters Every single char will be interpreted as an delimiter. If a delimiter with multiple chars is needed, use an Array.
* @return array. If $string is empty OR not a string, return false
*/
public static function multiExplode($string, $delimiters = '\\|/,')
{
$delimiterArray = is_array($delimiters)?$delimiters:str_split($delimiters);
$newRegex = implode('|', array_map (function($delimiter) {return preg_quote($delimiter, '/');}, $delimiterArray));
return is_string($string) && !empty($string) ? array_map('trim', preg_split('/('.$newRegex.')/', $string, -1, PREG_SPLIT_NO_EMPTY)) : false;
}

在您的情况下,应该为 $分隔符参数使用 Array。然后可以使用多个字符作为一个分隔符。

如果不关心结果中的尾随空格,可以删除返回行中的 array_map('trim', [...] )部分。(但在这种情况下,不要吹毛求疵。保持 preg_split在里面。)

需要的 PHP 版本: 5.3.0或更高版本。

你可以测试它 给你