有没有办法使用分隔符数组来爆炸?(
)PHP手册:
array explode(string $ delimiter,string $ string [,int $ limit])
有没有使用string $delimiter
而不影响性能的方法,而不是使用array $delimiter
?
答案 0 :(得分:54)
$str = 'Monsters are SUPER scary, bro!';
$del = array('a', 'b', 'c');
// In one fell swoop...
$arr = explode( $del[0], str_replace($del, $del[0], $str) );
答案 1 :(得分:29)
将preg_split()
与适当的正则表达式一起使用。
答案 2 :(得分:6)
function explode_by_array($delim, $input) {
$unidelim = $delim[0];
$step_01 = str_replace($delim, $unidelim, $input); //Extra step to create a uniform value
return explode($unidelim, $step_01);
}
这改善了@ 65Fbef05的代码。我们使用第一个分隔符,因为"+delim+"
可以用在原始字符串中。
答案 3 :(得分:0)
如果第一个定界符之后的定界符包含该第一个定界符中的字符,则上述建议将不起作用。例如,如果要使用换行符作为定界符,但不确定输入是使用\ r \ n,\ r还是仅使用\ n,则不能使用上述方法。
$str = '___RN___RN___R___N___RN___RN';
$del = array('RN', 'R', 'N');
# This won't work if delimiters 2, 3, n include characters from delimiter 1
var_dump(explode( $del[0], str_replace($del, $del[0], $str)));
这将输出:
array(11) {
[0]=>
string(4) "___R"
[1]=>
string(0) ""
[2]=>
string(4) "___R"
[3]=>
string(0) ""
[4]=>
string(4) "___R"
[5]=>
string(3) "___"
[6]=>
string(4) "___R"
[7]=>
string(0) ""
[8]=>
string(4) "___R"
[9]=>
string(0) ""
[10]=>
string(0) ""
}
如果您打算进行字符串比较,那不是理想的选择。相反,您将需要变得更加复杂。我在下面写的内容可能不是最有效,最简洁的方法,但确实可以解决问题。
# This, however, will work
function array_explode($delimiters, $string){
if(!is_array(($delimiters)) && !is_array($string)){
//if neither the delimiter nor the string are arrays
return explode($delimiters,$string);
} else if(!is_array($delimiters) && is_array($string)) {
//if the delimiter is not an array but the string is
foreach($string as $item){
foreach(explode($delimiters, $item) as $sub_item){
$items[] = $sub_item;
}
}
return $items;
} else if(is_array($delimiters) && !is_array($string)) {
//if the delimiter is an array but the string is not
$string_array[] = $string;
foreach($delimiters as $delimiter){
$string_array = array_explode($delimiter, $string_array);
}
return $string_array;
}
}
var_dump(array_explode($del,$str));
它将输出以下内容:
array(7) {
[0]=>
string(3) "___"
[1]=>
string(3) "___"
[2]=>
string(3) "___"
[3]=>
string(3) "___"
[4]=>
string(3) "___"
[5]=>
string(3) "___"
[6]=>
string(0) ""
}
答案 4 :(得分:-2)
php的explode方法不支持多个分隔符,因此您无法将其传递给数组。 另外,你解析什么样的字符串有多个分隔符?你最好的选择是循环你的分隔符,并重新爆炸一些爆炸的字符串。