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;
}
616   11  

11 ответов:

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

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

    Ничего не найдено.