Многократные разделители Php в разрыве

У меня проблема, у меня есть строковый массив, и я хочу взорваться в другом разделителе. Например

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

Solutions Collecting From Web of "Многократные разделители Php в разрыве"

как насчет использования

 $ output = preg_split ("/ (@ | vs) /", $ input);

Вы можете взять первую строку, заменить все @ с помощью vs используя str_replace , а затем взорвать vs или наоборот.

 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] => ) // ) 

Источник: php @ metehanarslan на php.net

Не будет ли strtok() работать для вас?

Как насчет использования 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)))))); } 

Кажется, это нечитаемо, но я тестировал его как работающий здесь.

Однострочные ftw!

Просто вы можете использовать следующий код:

 $arr=explode('sep1',str_replace(array('sep2','sep3','sep4'),'sep1',$mystring)); 

У вас возникнут некоторые проблемы (например, если у вас есть эта строка: «vs @ apples»), используя этот метод sepparating, но если мы начнем с того, что вы подумали об этом и устранили все эти возможные столкновения, вы могли бы просто заменить все вхождения $delimiter[1] на $delimiter[n] с помощью $delimiter[0] , а затем разделить на этот первый?

Если ваш разделитель – это только символы, вы можете использовать strtok , который, кажется, более подходит здесь. Обратите внимание, что вы должны использовать его с циклом while для достижения эффекта.

Я делаю это так …

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

Это будет работать:

 $stringToSplit = 'This is my String!' ."\n\r". 'Second Line'; $split = explode ( ' ', implode ( ' ', explode ( "\n\r", $stringToSplit ) ) ); 

Как вы можете видеть, он сначала склеивает части с разнесенными частицами вместе с пространством, а затем снова разделяет его, на этот раз снимая с ним пробелы.

Вы можете попробовать это решение …. Он отлично работает

 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/