2012-01-27 76 views
0

这是我输入:PHP - 字符串多维数组

WINDMILL_1门打开,ABSWITCH1 OPEN,ABSENSE1 OPEN,ABSWITCH2 OPEN ,ABSENSE2 OPEN,活动时间:11:30:00:03/08/2096 WINDMILL_1 DOOR OPEN,ABSWITCH1 OPEN,ABSENSE1 OPEN,ABSWITCH2 OPEN,ABSENSE2 OPEN ,活动时间:11:30:00:2096年3月8日WINDMILL_1门打开,ABSWITCH1 OPEN,ABSENSE1 OPEN,ABSWITCH2 OPEN,ABSENSE2 OPEN, STATUS,ALARM ON Time:12:46:01:25/01/2012

我的输出

Array(
    [0] => Array(
     [0] => DOOR OPEN 
     [1] => ABSWITCH1 OPEN 
     [2] => ABSENSE1 OPEN 
     [3] => ABSWITCH2 OPEN 
     [4] => ABSENSE2 OPEN 
     [5] => EVENT Time:11:30:00 : 03/08/2096 
    ) 

    [1] => Array(
     [0] => DOOR OPEN 
     [1] => ABSWITCH1 OPEN 
     [2] => ABSENSE1 OPEN 
     [3] => ABSWITCH2 OPEN 
     [4] => ABSENSE2 OPEN 
     [5] => EVENT Time:11:30:00 : 03/08/2096 
    ) 

    [2] => Array(
     [0] => DOOR OPEN 
     [1] => ABSWITCH1 OPEN 
     [2] => ABSENSE1 OPEN 
     [3] => ABSWITCH2 OPEN 
     [4] => ABSENSE2 OPEN 
     [5] => STATUS 
     [6] => ALARM ON Time:12:46:01 : 25/01/2012 
    ) 
) 

我设法把上面的输出与此代码

$arr = explode("|", $string); 
foreach ($arr as $key => $val) 
{ 
    $arr[$key] = explode(',', $val); 
}   
print_r($arr); 

但我需要的是

Array (
    [0] => Array (
     [DOOR] => OPEN 
     [ABSWITCH1] => OPEN 
     [ABSENSE1] => OPEN 
     [ABSWITCH2] => OPEN 
     [ABSENSE2] => OPEN 
     [EVENT] => Time:11:30:00 : 03/08/2096 
    ),  
    ... 
) 

请帮助我。

+0

我认为另一个嵌套'foreach'循环,你通过爆炸的空间会做的伎俩,这样只会给同一个问题事件的时间,因为他们将分裂以及... – Joep 2012-01-27 08:19:44

回答

1

更改为:

$tmp1 = explode('|', $string); 
foreach ($tmp1 as $key1 => $val1) { 
    $tmp2 = explode(",", $val1); 
    foreach ($tmp2 as $key2 => $val2) { 
     $tmp3 = explode(' ', trim($val2)); 
     $key = ($tmp3[count($tmp3) - 2] == ':' ? 'EVENT' : $tmp3[count($tmp3) - 2]); 
     $newArr[$key1][$key] = $tmp3[count($tmp3) - 1]; 
    } 
} 
print_r($newArr); 

也看到这个example

+0

我已经更新了我的代码。 – scessor 2012-01-27 08:36:09

0

我有点困惑,因为没有在您的字符串中看到任何管道分隔符。反正你可以使用此代码:

// $str is your original string 
$arr = array(); 
foreach (explode('WINDMILL_1 ', $str) as $s) { 
    if (trim($s) != "") 
     $arr[] = explode(', ', $s); 
} 
print_r($arr); 

OUTPUT:

Array 
(
    [0] => Array 
     (
      [0] => DOOR OPEN 
      [1] => ABSWITCH1 OPEN 
      [2] => ABSENSE1 OPEN 
      [3] => ABSWITCH2 OPEN 
      [4] => ABSENSE2 OPEN 
      [5] => EVENT Time:11:30:00 : 03/08/2096 
     ) 

    [1] => Array 
     (
      [0] => DOOR OPEN 
      [1] => ABSWITCH1 OPEN 
      [2] => ABSENSE1 OPEN 
      [3] => ABSWITCH2 OPEN 
      [4] => ABSENSE2 OPEN 
      [5] => EVENT Time:11:30:00 : 03/08/2096 
     ) 

    [2] => Array 
     (
      [0] => DOOR OPEN 
      [1] => ABSWITCH1 OPEN 
      [2] => ABSENSE1 OPEN 
      [3] => ABSWITCH2 OPEN 
      [4] => ABSENSE2 OPEN 
      [5] => STATUS 
      [6] => ALARM ON Time:12:46:01 : 25/01/2012 
     ) 

)