2015-06-04 182 views
2

我想使用多個分隔符(↑↑ , ↑ , ↓↓ , ↓)爆炸一個字符串。如何使用多個分隔符分隔字符串並保留分隔符?

例如,我有這個intput字符串:

$string = "(2.8 , 3.1) → (↓↓2.4 , ↓3.0)"; 

我想將其轉換成這樣(預期輸出)數組:

Array 
(
    [0] => (2.8 , 3.1) → (
    [1] => ↓↓ 
    [2] => 2.4 , 
    [3] => ↓ 
    [4] => 3.0) 
) 

我最好的嘗試打印我這個(當前輸出):

Array 
(
    [0] => (2.8 , 3.1) → (
    [1] => ↓ 
    [2] => ↓2.4 , 
    [3] => ↓3.0) 
) 

這是我當前的代碼:

<?php 

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

    $delimiters = array('↑↑','↑','↓↓','↓'); 
    $test = array('2up↑↑','1up↑','2down↓↓','1down↓'); 
    $newDel = array('2up','1up','2down','1down'); 
    $array = array(); 

    $strings = array(
     "(2.8 , 3.1) → (↓↓2.4 , ↓3.0)", 
     "(2.7 , 2.6) → (↑2.8 , ↑↑3.0)", 
     "(2.0 , 3.4) → (↑↑2.8 , ↓↓2.3)" 
    ); 

    foreach($strings as $string){ 
     foreach($test as $key => $reps){ 
      $string = str_replace(    
       $delimiters[$key], 
       $reps, 
       $string 
      ); 
     } 
     //echo $string; 
     $array[] = array_values(array_filter(multiexplode($newDel,$string))); 
    } 

?> 

我建立它這樣的格式,因爲我要去環路這些價值觀和打印這些一個PowerPoint裏面那些定界符(箭頭)有不同的顏色

回答

6

這應該爲你工作:

只需使用preg_split()並設置標誌以保留分隔符。例如。

<?php 

    $string = "(2.8 , 3.1) → (↓↓2.4 , ↓3.0)"; 
    $arr = preg_split("/(↑↑|↑|↓↓|↓)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE); 
    print_r($arr); 

?> 

輸出:

Array 
(
    [0] => (2.8 , 3.1) → (
    [1] => ↓↓ 
    [2] => 2.4 , 
    [3] => ↓ 
    [4] => 3.0) 
) 
+0

deym。不知道它可能只是一個3班的代碼。謝謝 – roullie

+0

@roullie不客氣。享受你的一天:) – Rizier123

+0

答案將在6分鐘內被接受 – roullie

相關問題