IT story

폭발에서 PHP 여러 구분 기호

hot-time 2020. 7. 3. 18:11
반응형

폭발에서 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;
}

사용은 어떻습니까

$ 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.net의 php @ metehanarslan


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!


strtok()당신을 위해 작동 하지 않습니까?


간단히 다음 코드를 사용할 수 있습니다.

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

You can try this solution.... It works great

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>';

Source : http://www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/


I do it this way...

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

You are going to have some problems (what if you have this string: "vs @ apples" for instance) using this method of sepparating, but if we start by stating that you have thought about that and have fixed all of those possible collisions, you could just replace all occurences of $delimiter[1] to $delimiter[n] with $delimiter[0], and then split on that first one?


If your delimiter is only characters, you can use strtok, which seems to be more fit here. Note that you must use it with a while loop to achieve the effects.


How about this?

/**
 * Like explode with multiple delimiters. 
 * Default delimiters are: \ | / and ,
 *
 * @param string $string String that thould be converted to an array.
 * @param mixed $delimiters Every single char will be interpreted as an delimiter. If a delimiter with multiple chars is needed, use an Array.
 * @return array. If $string is empty OR not a string, return false
 */
public static function multiExplode($string, $delimiters = '\\|/,') 
{
  $delimiterArray = is_array($delimiters)?$delimiters:str_split($delimiters);
  $newRegex = implode('|', array_map (function($delimiter) {return preg_quote($delimiter, '/');}, $delimiterArray));
  return is_string($string) && !empty($string) ? array_map('trim', preg_split('/('.$newRegex.')/', $string, -1, PREG_SPLIT_NO_EMPTY)) : false;
}

In your case you should use an Array for the $delimiters param. Then it is possible to use multiple chars as one delimiter.

If you don't care about trailing spaces in your results, you can remove the array_map('trim', [...] ) part in the return row. (But don't be a quibbler in this case. Keep the preg_split in it.)

Required PHP Version: 5.3.0 or higher.

You can test it here


This will work:

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

As you can see, it first glues the by \n\r exploded parts together with a space, to then cut it apart again, this time taking the spaces with him.

참고URL : https://stackoverflow.com/questions/4955433/php-multiple-delimiters-in-explode

반응형