2011-09-11 90 views
0

优化函数我已经建立在PHP的功能像一个字符串转换:帮助在PHP

[20110911, 20110913, [20110915, 20110918], 20110920, 20110922, 20110924, [20110926, 20110927], 20110929] 

到PHP阵列等:

Array 
(
    [0] => 20110911 
    [1] => 20110913 
    [2] => Array 
     (
      [0] => 20110915 
      [1] => 20110918 
     ) 

    [3] => 20110920 
    [4] => 20110922 
    [5] => 20110924 
    [6] => Array 
     (
      [0] => 20110926 
      [1] => 20110927 
     ) 

    [7] => 20110929 
    [8] => Array 
     (
      [0] => 20111001 
      [1] => 20111002 
     ) 

    [9] => 20111004 
    [10] => Array 
     (
      [0] => 20111006 
      [1] => 20111007 
     ) 

) 

的功能是:

function dates2Array($d){ 
    if($d!==''){ 
     $d=substr($d, 1, strlen($d)-2); 
     $d=explode(', ', $d); 
     $dates=array(); 
     if(!empty($d)){ 
      $j=1; 
      foreach($d as $k=>$v){ 
       if(substr($v, 0, 1)==='[') $dates[]=array(substr($v, 1, strlen($v))); 
       elseif(substr($v, strlen($v)-1, strlen($v))===']'){ 
        $dates[$k-$j][1]=substr($v, 0, strlen($v)-1); 
        $j++; 
       } 
       else $dates[]=$v; 
      } 
     } 
    } 

    return $d!==''?$dates:''; 
} 

我并不完全满意我的功能。 我认为它可以更优化和压缩速度.. 它可以吗?

回答

8

使用JSON(json_decode()json_encode()),而不是

http://sandbox.phpcode.eu/g/b3814/2

结果:

Array 
(
    [0] => 20110911 
    [1] => 20110913 
    [2] => Array 
     (
      [0] => 20110915 
      [1] => 20110918 
     ) 

    [3] => 20110920 
    [4] => 20110922 
    [5] => 20110924 
    [6] => Array 
     (
      [0] => 20110926 
      [1] => 20110927 
     ) 

    [7] => 20110929 
) 
+0

它会像上面提到的那样转换数组吗? 我做但它没有做什么...... :( –

+0

+1 @genesis。 或者你可以使用sfYaml – mathieug

+0

是的,你的代码是json已经 – genesis

2

你可以通过你的字符串中{...}并把它传递给json_decode(str, true)回去的阵列。

>> json_decode("[20110911, 20110913, [20110915, 20110918], 20110920, 20110922, 2 
0110924, [20110926, 20110927], 20110929]") 
array (
    0 => 20110911, 
    1 => 20110913, 
    2 => 
    array (
    0 => 20110915, 
    1 => 20110918, 
), 
    3 => 20110920, 
    4 => 20110922, 
    5 => 20110924, 
    6 => 
    array (
    0 => 20110926, 
    1 => 20110927, 
), 
    7 => 20110929, 
) 
+1

它是确切的y我在13分钟前发布的回答 – genesis

+0

yip,我注意到刚才的情况。这是一个很好的解决方案。 –