Приведенные выше предложения не будут работать, если разделители после первого разделителя включают символы из этого первого разделителя. Например, если вы хотите использовать разрывы строк в качестве разделителей, но не уверены, использует ли ваш ввод \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
person
dearsina
schedule
08.08.2018