2012-01-27 5 views
0

Вот мой вход:PHP - строка многомерного массива

WINDMILL_1 ДВЕРИ, ABSWITCH1 ОТКРЫТО, ABSENSE1 ОТКРЫТО, ABSWITCH2 ОТКРЫТЫЙ , ABSENSE2 ОТКРЫТО, Время EVENT: 11: 30: 00: 03/08/2096 WINDMILL_1 ДВЕРЬ ОТКРЫТО, ABSWITCH1 ОТКРЫТО, ABSENSE1 ОТКРЫТО, ABSWITCH2 ОТКРЫТО, ABSENSE2 ОТКРЫТЫЙ , время EVENT: 11: 30: 00: 03/08/2096 WINDMILL_1 ДВЕРИ, ABSWITCH1 ОТКРЫТО, ABSENSE1 ОТКРЫТО, ABSWITCH2 ОТКРЫТО, ABSENSE2 ОТКРЫТО, СОСТОЯНИЕ, ТРЕВОГА ВКЛ Время: 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

ответ

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

0

Я немного смущен, так как не вижу ограничителя в вашей строке. В любом случае вы можете использовать этот код:

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

ВЫВОД:

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 
     ) 

) 
Смежные вопросы