Php несколько разделителей в разнесении


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

$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;
}
 114
Author: Nanne, 2011-02-10

11 answers

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

$output = preg_split( "/ (@|vs) /", $input );
 224
Author: SergeS, 2011-02-10 09:45:50

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

 48
Author: John Ballinger, 2012-01-20 17:38:19
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

 32
Author: bizauto, 2015-04-24 12:22:52

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

 11
Author: Aubry, 2012-10-24 20:06:05

Не стал бы strtok() работать на тебя?

 10
Author: Mchl, 2012-01-20 17:37:21

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

$arr=explode('sep1',str_replace(array('sep2','sep3','sep4'),'sep1',$mystring));
 6
Author: Samer Ata, 2014-03-08 11:45:46

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

 1
Author: Nanne, 2011-02-10 09:47:17

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

 1
Author: Hoàng Long, 2012-01-20 17:37:40

Я делаю это таким образом...

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);
}
 1
Author: Vaci, 2014-10-14 11:37:43

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

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

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

 0
Author: Xesau, 2014-12-30 18:09:41

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

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/

 0
Author: Mayur Chauhan, 2016-06-07 09:54:00