我有一个问题,我有一个字符串数组,我想在不同的分隔符中爆炸。例如
$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;
}
答案 0 :(得分:247)
使用
怎么样?$output = preg_split( "/ (@|vs) /", $input );
答案 1 :(得分:59)
您可以使用第一个字符串,使用@
将所有vs
替换为str_replace
,然后在vs
上展开,反之亦然。
答案 2 :(得分:37)
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] => )
// )
答案 3 :(得分:11)
如何使用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))))));
}
我想,这有点难以理解,但我在这里测试了它。
One-liners ftw!
答案 4 :(得分:10)
strtok()
不会为你效劳吗?
答案 5 :(得分:6)
您只需使用以下代码:
$arr=explode('sep1',str_replace(array('sep2','sep3','sep4'),'sep1',$mystring));
答案 6 :(得分:2)
我这样做......
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);
}
答案 7 :(得分:2)
你可以尝试这个解决方案....它很棒
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/
答案 8 :(得分:1)
你会遇到一些问题(如果你有这个字符串:例如“vs @ apples”)使用这种sepparating方法,但如果我们首先说明你已经考虑过并修复了所有这些问题可能的碰撞,你可以用$delimiter[1]
替换$delimiter[n]
到$delimiter[0]
的所有出现,然后拆分第一个?
答案 9 :(得分:1)
如果你的分隔符只是字符,你可以使用strtok
,这似乎更合适。请注意,您必须使用while
循环来实现效果。
答案 10 :(得分:1)
怎么样?
/**
* 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;
}
在您的情况下,应将数组用于$ delimiters参数。然后可以将多个字符用作一个定界符。
如果您不关心结果中的尾随空格,则可以删除返回行中的array_map('trim', [...] )
部分。
所需的PHP版本:5.3.0或更高版本。
您可以here对其进行测试
答案 11 :(得分:0)
这将有效:
$stringToSplit = 'This is my String!' ."\n\r". 'Second Line';
$split = explode (
' ', implode (
' ', explode (
"\n\r", $stringToSplit
)
)
);
正如你所看到的,它首先将\ n \ r \ n爆炸部分与空格粘合在一起,然后将它再次分开,这次与他一起占据空间。