Php несколько разделителей в explode
у меня проблема, у меня есть массив строк, и я хочу взорваться в другом разделителе. Например
$example = 'Appel @ Ratte';
$example2 = 'apple vs ratte'
и мне нужен массив, который взрывается в @ или против
Я уже написал решение, но если у всех есть лучшее решение, пожалуйста, пост здесь.
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;
}
11 ответов:
вы можете взять первую строку, заменить все
@с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 at php.net
Как насчет использования
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)))))); }это вроде нечитабельно, я думаю, но я проверил его как работу здесь.
один-лайнеры класса!
не
strtok()работа для вас?
просто вы можете использовать следующий код:
$arr=explode('sep1',str_replace(array('sep2','sep3','sep4'),'sep1',$mystring));
У вас будут некоторые проблемы (например, если у вас есть эта строка: "vs @ apples"), используя этот метод разделения, но если мы начнем с того, что вы подумали об этом и исправили все эти возможные столкновения, вы можете просто заменить все случаи
$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/
Comments