php - विस्फोट में पीएचपी एकाधिक delimiters




explode (8)

आप इस समाधान का प्रयास कर सकते हैं .... यह बहुत अच्छा काम करता है

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/

मुझे एक समस्या है, मेरे पास एक स्ट्रिंग सरणी है, और मैं अलग-अलग डिलीमीटर में विस्फोट करना चाहता हूं। उदाहरण के लिए

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

आप पहली स्ट्रिंग ले सकते हैं, str_replace का उपयोग कर vs सभी @ को प्रतिस्थापित कर str_replace , फिर vs या इसके विपरीत विस्फोट कर सकते हैं।


उपयोग करने के बारे में क्या

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

पहले के साथ अपने सभी अन्य डिलीमीटरों को प्रतिस्थापित करने के लिए 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!


मैं इसे इस तरह से करता हूं ...

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

यदि आपका डिलीमीटर केवल वर्ण है, तो आप strtok उपयोग कर सकते हैं, जो यहां अधिक फिट लगता है। ध्यान दें कि प्रभावों को प्राप्त करने के लिए आपको इसे while साथ उपयोग करना होगा।



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







explode