Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按分隔符数组分解_Php_Explode - Fatal编程技术网

Php 按分隔符数组分解

Php 按分隔符数组分解,php,explode,Php,Explode,有没有任何方法可以使用分隔符数组分解()呢 PHP手册: 数组分解(字符串$delimiter,字符串$string[,int$limit]) 除了使用string$delimiter还有什么方法可以使用array$delimiter而不会对性能造成太大影响吗?与适当的正则表达式一起使用。php的explode方法不支持多个分隔符,因此不能向其传递数组。 另外,您正在分析哪种类型的具有多个分隔符的字符串?最好的方法是循环使用分隔符,并重新分解一些分解的字符串 $str = 'Monsters a

有没有任何方法可以使用分隔符数组分解()呢

PHP手册:

数组分解(字符串$delimiter,字符串$string[,int$limit])


除了使用
string$delimiter
还有什么方法可以使用
array$delimiter
而不会对性能造成太大影响吗?

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

php的explode方法不支持多个分隔符,因此不能向其传递数组。 另外,您正在分析哪种类型的具有多个分隔符的字符串?最好的方法是循环使用分隔符,并重新分解一些分解的字符串

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

这改进了@65Fbef05的代码。我们使用第一个分隔符,因为
“+delim+”
可以在原始字符串中使用。

如果第一个分隔符后的分隔符包含第一个分隔符中的字符,则上述建议将无效。例如,如果要使用换行符作为分隔符,但不确定输入是使用\r\n\r还是仅使用\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) ""
}

有一个剧本:

例如:
print\u r(preg\u split(“/[,.]/”,“01,2.3”)
将为您提供
数组([0]=>0[1]=>1[2]=>2[3]=>3)
打印(预拆分(“/[,\.]/”,“0 1,2.3”)你的意思是:)谢谢,这可能是我想的最好的方法。这应该比regexs快,很好。这是一个令人惊讶的、简洁的解决方案,谢谢!很好,但我更喜欢艾尔的版本。这是尾随第一个分隔符的问题。@user568109我确信我只是缺乏想象力,但我看不出其中的错误/小故障。在研究了这个页面太长时间后,我猜65Fbef05的答案被更改为克服错误。
array(7) {
  [0]=>
  string(3) "___"
  [1]=>
  string(3) "___"
  [2]=>
  string(3) "___"
  [3]=>
  string(3) "___"
  [4]=>
  string(3) "___"
  [5]=>
  string(3) "___"
  [6]=>
  string(0) ""
}