2015-06-04 184 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

相关问题