21

有没有办法使用一组分隔符来explode()?

PHP手册:

数组爆炸(字符串 $delimiter ,字符串 $string [, int $limit ] )

string $delimiter有没有什么方法可以在array $delimiter不影响性能的情况下使用而不是使用?

4

5 回答 5

58
$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) );
于 2010-12-06T20:36:08.160 回答
31

preg_split()与适当的正则表达式一起使用。

于 2010-05-18T19:07:06.660 回答
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+"可能在原始字符串中使用。

于 2012-07-07T19:36:07.937 回答
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) ""
}

玩一玩:https ://3v4l.org/bJOkI

于 2018-08-08T11:49:57.133 回答
-2

php的explode方法不支持多个分隔符,所以不能传数组。另外,您正在解析具有多个分隔符的哪种字符串?你最好的办法是遍历你的分隔符,并重新爆炸一些爆炸的字符串。

于 2010-05-18T19:08:20.287 回答